需要有关HTTPSession超时的帮助

时间:2016-07-16 16:37:44

标签: javascript java session java-ee httpsession

我正在开发一个纯粹基于JS和Rest WS的webapp。部署在Weblogic上。 使用FORM Auth进行登录,使用会话无效进行注销。

对于会话超时,我有两个逻辑

1)web.xml会话超时配置

2)JS计时器,检查click或keypress事件,否则调用带有param的Logout servlet作为sessiontimeout

现在的问题是,通过访问JS文件来说客户端是活动的,但是没有进行任何REST WS调用,因为SESSION超时,我无法向USER显示任何通知。这是因为逻辑1,它不允许我配置任何方式来指定重定向或传递任何请求参数的页面。

逻辑2工作正常,当客户端处于非活动状态30分钟时它调用Logout?sessionTimeout = true servlet with client params from Client,解决了我的问题。但这种情况非常罕见,例如100例中的10例和逻辑1的90倍。

我能想到的唯一解决方案是删除web.xml会话配置,只有JS会话计时器检查,如果为TRUE则无效。但这是一种正确的方法/设计吗?

专家请分享您的想法。

1 个答案:

答案 0 :(得分:2)

您希望维护服务器上的大部分超时逻辑(不太可能被修改/黑客攻击)并创建一个可以从客户端调用的服务,该服务定期询问服务器是否有会话,是仍然有效。

最佳做法是在会话开始时为用户生成令牌,并将其与第一个响应一起传递;可能会将其保存在cookie中。令牌的标识和到期时间由服务器维护。

客户端会通过从cookie中读取令牌ID并在AJAX调用中将其传递给服务器来检查会话是否已过期,每30秒一次。然后服务器响应该令牌是否有效。当客户端从服务器收到无效响应时,它会将用户导航到登录页面。

在服务器端,如果您收到页面请求,并且传递的cookie包含一个无法识别或已过期的令牌,则只需将用户重定向到登录页面即可。

维护服务器上大部分超时逻辑的另一个好处是,如果客户端在关闭javascript的情况下进行浏览 - 您的会话超时逻辑仍能正常运行。