2016-06-21 77 views
-2

我的控制器@SessionAttribute(“sample_dto”)中有一个会话属性。即使会话超时后,我也需要使用sample_dto。什么是正确的做法。会话获取超时时弹簧控制器@SessionAttribute会发生什么

PS:当会话超时,浏览器被重定向到登录屏幕。我怎样才能避免它,并把它带回到我在会议超时前的地方。

感谢

+4

当您询问有关由您的代码引起的问题的问题时,如果您提供的代码可供人们用来重现问题(最低工作示例),您将得到更好的答案 – Alupotha

回答

11

根据你的问题,我觉得你并不需要一个会话属性。因为您需要访问 单独会话中的相同数据项。最简单的解决方案是使用一个普通的实例变量。因为你的控制器默认是单身人士。 它与应用程序范围类似,因为您不会更改控制器的范围,也不会重新启动应用程序。

如果这个任务是用户特定的(您的数据项应该保持每个用户的基础),那么您可以使用cookie来保存临时用户状态。 为了设置cookie,你可以实现你自己的HttpSessionListener类,并在sessionDestroyed方法中,你可以做你的cookie保存的东西。 因为只有当你的会话被破坏(超时)时,你才需要做这件事。

如果您的数据更大,则可以通过参考相关用户将数据保存在数据库中。你可以使用相同的sessionDestroyed方法。