我知道在java web应用程序中维护会话有不同的机制,比如servlet
但我不知道如何在核心Java应用程序(即独立应用程序)中维护任何会话。所以任何人都可以帮我找到我的一些问题,
如何在独立应用程序中维护特定用户的超时会话?请尝试提供一些解释代码
答案 0 :(得分:1)
检查
中的InactivityListenerhttp://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); }