【问题标题】:close session after the browser closed or connection got interrupted浏览器关闭或连接中断后关闭会话
【发布时间】:2013-11-12 01:46:27
【问题描述】:

我看过很多关于这个话题的帖子
borwser 关闭或连接中断后关闭会话
我在 web.xml 中配置了会话超时,但是一个场景失败了

a) 在我的应用程序中,将创建案例。这种情况可以分配给多个用户。但是两个用户现在应该编辑同一个案例。我处理得很好。我在数据库中存储了一个标志,并基于标志 iam 锁定其他用户。

b) 对于一种情况,一个用户编辑案例并丢失连接或浏览器意外关闭,那么他的会话将在指定时间之前关闭,但用户仍然没有编辑它。当另一个用户尝试访问它时。如何关闭会话并更新数据库中的标志。

请就此提出建议。

【问题讨论】:

    标签: java session


    【解决方案1】:

    第一种解决方案:使用 HttpSessionListener,在会话即将被销毁时调用。在会话被销毁时,请注意移除用户的所有锁。

    第二个更好的解决方案:使用乐观锁定。允许每个用户修改数据,但如果您检测到用户正在修改的数据版本与开始修改时加载的版本不同,则会引发异常。这可以通过向表中添加版本字段,将其作为隐藏字段存储在更新表单中,并在更新时检查它来完成:

    update foo set ... , version = version + 1 where id = ? and version = versionSentByTheUser
    

    如果更新没有更新任何内容,则说明用户发送的版本与数据库中的版本不一样,因此是其他人修改了数据。

    这种乐观锁定机制是由 JPA 为您实现的,顺便说一句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 2013-02-16
      • 2017-11-22
      • 2014-08-15
      • 2011-12-17
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多