如何在核心java应用程序中维护会话超时?

时间:2014-05-09 17:14:11

标签: java session design-patterns

我知道在java web应用程序中维护会话有不同的机制,比如servlet

  1. 网址重写
  2. 隐藏的表单字段
  3. 缓存
  4. HTTP会话
  5. 但我不知道如何在核心Java应用程序(即独立应用程序)中维护任何会话。所以任何人都可以帮我找到我的一些问题,

    如何在独立应用程序中维护特定用户的超时会话?请尝试提供一些解释代码

2 个答案:

答案 0 :(得分:1)

检查

中的InactivityListener

http://tips4java.wordpress.com/2008/10/24/application-inactivity/

有时您可能希望监控应用程序的不活动状态。也许您想在一定的时间间隔后注销用户。此要求可分为两个主要步骤。我们需要:

在应用程序级别侦听事件 跟踪这些事件之间的时间间隔

每当事件之间的时间间隔超过我们的不活动阈值时,我们就会调用不活动动作。

答案 1 :(得分:0)

http://pdf.coreservlets.com/Session-Tracking.pdf

请参阅bove链接。在那篇PDF中,你将在本书的最后得到一个很好的例子。

默认情况下,会话跟踪基于存储在浏览器内存中的cookie, 没有写入磁盘。因此,除非servlet显式读取传入 JSESSIONID cookie,设置最大年龄和路径,并将其发送回去,退出 浏览器导致会话被破坏:客户端将无法访问 会议再次。然而,问题是服务器不知道 浏览器已关闭,因此服务器必须在内存中维护会话,直到 已超出非活动时间间隔。

//在Servlet中 public void doFilter(ServletRequest req,ServletResponse resp,FilterChain filterChain)抛出IOException,ServletException {             HttpServletResponse httpResp =(HttpServletResponse)resp;             HttpServletRequest httpReq =(HttpServletRequest)req;             long currTime = System.currentTimeMillis();             long expiryTime = currTime + session.getMaxInactiveInterval()* 1000;             Cookie cookie = new Cookie(“serverTime”,“”+ currTime);             cookie.setPath( “/”);             httpResp.addCookie(饼干);             if(httpReq.getRemoteUser()!= null){                 cookie = new Cookie(“sessionExpiry”,“”+ expiryTime);             } else {                 cookie = new Cookie(“sessionExpiry”,“”+ currTime);             }             cookie.setPath( “/”);             httpResponse.addCookie(饼干);             filterChain.doFilter(req,resp);     }