浏览器关闭或连接中断后关闭会话

时间:2013-11-11 16:19:43

标签: java session

我经历了很多关于这个话题的帖子
在borwser关闭或conncetion被打断后关闭会话
我在web.xml中配置了会话超时,但是一个ifario iam失败了

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

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

请就此提出建议。

1 个答案:

答案 0 :(得分:0)

第一个解决方案:使用HttpSessionListener,当会话即将被销毁时将调用它。小心删除用户的所有锁定会被破坏。

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

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

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

这种乐观的锁定机制由JPA,BTW为您实现。