会话变量在java中偶尔会丢失

时间:2016-12-08 06:46:44

标签: java session servlets data-loss

我在我的应用程序主页的pageload上的session对象中设置了userId,如下所示

HttpSession session = req.getSession();
session.setAttribute("userId", validUserId);

当用户导航到应用程序的不同页面时,我使用下面的常规方法获取此userId,稍后我将此userId保存在数据库中。

HttpSession session = request.getSession();
String userId = (String) session.getAttribute("userId");

这在100次通话中几乎可以使用95次。我能够获取userId并存储在数据库中,但是对于5次调用,我得到的只是一个空白的userId对象。 我无法在较低的环境中重现此问题,因此很难理解问题所在。

我已经将页面的自动过期时间设置为20分钟,方法是在web.xml中添加属性,然后在jsp页面中使用它。

有人可以指导一下这个问题的根本原因吗?

1 个答案:

答案 0 :(得分:0)

找到根本原因。

当我显示到期页面并使会话无效时,如果用户点击浏览器的后退按钮,它再次显示旧页面,如果现在提交数据,则此变量不可用,因为会话已经失效先前。需要修复后退按钮问题。