2010-06-20 57 views
2

我使用的是Tomcat 6.0,JSF2.0.2如何随机我的会话为空?

我意识到随机的HttpServletRequest getSession方法,返回null。

我可以会话随机为空?

如何调试谁将会话设置为空?

我用request.getSession(true)检查了它,它返回null。它怎么可能无法创建会话?

回答

1

首先,这个问题与JSF无关,因为它只是一个基于组件的MVC框架。这个问题更多地与servletcontainer有关,在这种情况下就是Tomcat。

至于问题:我以前在特定的门户(类似)应用程序中看到过。 Tomcat具有一些内置网络钓鱼预防功能,当给定的Cookie ID和路径与Tomcat会话管理器中的任何cookie不匹配时,会返回null会话。此问题通常可以通过将HTTP Connector<Connector>emptySessionPath属性设置为conf/server.xmltrue来解决。

+0

我试过了 - 但它没有帮助。 我仍然不时得到这个错误信息:( – Dejell 2010-06-21 09:50:06

+0

调试请求头以检查有效的cookie是否存在,如果不是,那么这是一个客户端或代理问题 – BalusC 2010-06-21 14:23:31

+0

我们只需要设置user_id 。两者上的ExternalContext会话和Tomcat请求会话是这样的: 的ExternalContext ECTX = \t \t \t FacesContext.getCurrentInstance()getExternalContext(); \t \t HttpServletRequest的REQ =(HttpServletRequest的)ectx.getRequest(); \t \t HttpSession的会议=( HttpSession)ectx.getSession(false); \t \t ectx.getSession Map()。put(Constants.CURRENT_USER_ID_ATTR,user.getId()); \t \t session.setAttribute(Constants.CURRENT_USER_ID_ATTR,user.getId()); \t \t req.getSession(false).setAttribute(Constants.CURRENT_USER_ID_ATTR,user.getId()); 有趣,哈? – Dejell 2010-07-07 10:18:45