【问题标题】:Need help on HTTPSession Timeout需要有关 HTTPSession 超时的帮助
【发布时间】:2016-11-19 16:16:17
【问题描述】:

我正在开发一个 webapp,纯粹基于 JS 和 Rest WS。部署在 Weblogic 上。 使用 FORM Auth 登录和 Session Invalidate 注销。

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

1) web.xml 会话超时配置

2) JS 计时器,用于检查单击或按键事件,否则调用 Logout servlet,参数为 sessiontimeout

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

逻辑 2 工作正常,当客户端处于非活动状态 30 分钟时,它会使用来自客户端的请求参数调用 Logout?sessionTimeout=true servlet,这解决了我的问题。但是这种情况非常罕见,例如 100 例中有 10 例,是逻辑 1 的 90 倍。

我能想到的唯一解决方案是删除 web.xml 会话配置,只需检查 JS 会话计时器并在 TRUE 时使其无效。但这是正确的方法/设计吗?

请专家分享您的想法。

【问题讨论】:

  • 将两者与定期 ajax 请求结合起来检查会话。你不想让浏览器单独管理这个

标签: javascript java session jakarta-ee httpsession


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 对于过期的会话,您应该使用过期的令牌。您将在每个页面请求上更新此 cookie。莎拉建议的是大多数银行公司所做的。
  • 主要问题是服务器在会话超时时自动执行的重定向。在我的情况下,页眉页脚和导航是静态的,只有内容在中心发生变化。 90% 的时间登录页面在带有页眉页脚和导航的中心面板中呈现。在这种情况下,我不知道如何重定向。
猜你喜欢
  • 2019-08-23
  • 2015-05-28
  • 2015-06-23
  • 2014-12-26
  • 2013-08-12
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多