我正在使用上下文来共享登录会话。我使用setAttibute
函数。
我知道HttpSession
具有设置最大超时时间的属性。
是否可以以类似的方式设置上下文属性?
ServletContext context = httpservlet.getServletContext();
context.setAttribute("currentSessionUser", username);
由于
答案 0 :(得分:2)
不要那样做。上下文是应用程序范围的,当多个用户浏览您的站点时,您将获得非常意外的结果。
答案 1 :(得分:0)
你需要在 HttpSession 中设置属性 currentSessionUser 并且它是相关的,而不是ServletContext,当任何重新加载发生时(JAR部署),ServletContext将被销毁。 / p>
request.getSession(false).setAttribute("currentSessionUser", username);
答案 2 :(得分:0)
您可以为应用程序定义session-timeout属性。写在你的web.xml中:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
答案 3 :(得分:0)
我喜欢这个:
在ServletContext和HttpSession中放置一个对象:
String username = getUsername();
TheObject theObject = null;
if(session.getServletContext().getAttribute(THE_SESSION_KEY + "_" + theObject.getCurrentUsername()) == null) {
theObject = new TheObject(username);
session.setAttribute(THE_SESSION_KEY, theObject);
session.getServletContext().setAttribute(THE_SESSION_KEY + "_" + username, theObject);
}
else {
theObject = (TheObject)session.getServletContext().getAttribute(THE_SESSION_KEY + "_" + theObject.getCurrentUsername());
}
创建会话事件侦听器
public void sessionDestroyed(HttpSessionEvent arg0) {
if(arg0.getSession().getAttribute(THE_SESSION_KEY) != null) {
TheObject theObject = (TheObject)arg0.getSession().getAttribute(THE_SESSION_KEY);
arg0.getSession().getServletContext().removeAttribute(THE_SESSION_KEY + "_" + theObject.getCurrentUsername());
}
}