根据文档,每次在 session 生命周期内发出请求时,getLastAccessedTime()
都会更新。
我的应用程序有一个 Heartbeat Servlet,在用户登录系统并启动重要的扫描过程后每分钟调用一次。当用户登录时,会创建一个 session ,然后定期(每分钟)调用 Heartbeat。因此从逻辑上讲,这应该意味着 lastAccessedTime 每分钟更新一次。这个假设正确吗?
接下来,我将 session 超时设置为 15 分钟。如果用户处于非 Activity 状态 15 分钟(未运行扫描时), session 将被销毁并被 HttpSessionListener 的 sessionDestroyed 方法捕获。因此,lastAccessedTime 应显示上次访问 session 正好是 15 分钟前。唯一不会显示这一点的是当用户自己注销时。
为了明确起见,使用 lastAccessedTime 来查找用户上次在 session 中处于 Activity 状态的时间是否安全。另外,当 session 由于不活动而被销毁时,可以安全地假设时间始终为 15 分钟吗?
最佳答案
是的,每当请求带有与 session 关联的 cookie 时,getLastAccessedTime()
实际上都会更新。您的假设是正确的,lastAccessedTime
每分钟更新一次。
因此,如果您发送心跳,那么从技术上讲, session 始终处于 Activity 状态。
即将达到 session 超时值。是的,可以肯定的是,如果 15 分钟不活动, session 就会被破坏。但是,这绝不是你的情况。
关于java - getLastAccessedTime() 何时在 HttpSession 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172808/