是否可以设置ServletContext超时?

时间:2011-02-16 08:34:05

标签: java

我正在使用上下文来共享登录会话。我使用setAttibute函数。 我知道HttpSession具有设置最大超时时间的属性。

是否可以以类似的方式设置上下文属性?

ServletContext context = httpservlet.getServletContext();


context.setAttribute("currentSessionUser", username);

由于

4 个答案:

答案 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)

我喜欢这个:

  1. 在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());
    }
    
  2. 创建会话事件侦听器

    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());
        }
    }