javascript - 需要有关 HTTPSession 超时的帮助

标签 javascript java session jakarta-ee httpsession

我正在开发一个网络应用程序,纯粹基于 JS 和 Rest WS。部署在Weblogic上。 使用 FORM Auth 进行登录,使用 Session Invalidate 进行注销。

对于 session 超时,我有两个逻辑

1)web.xml session 超时配置

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

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

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

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

请专家分享您的想法。

最佳答案

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

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

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

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

在服务器上维护大部分超时逻辑的另一个优点是,如果客户端在关闭 JavaScript 的情况下进行浏览,您的 session 超时逻辑仍然可以正常工作。

关于javascript - 需要有关 HTTPSession 超时的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38413288/

相关文章:

javascript - 将字符串转换为js映射

javascript - 如何查看事件处理程序被添加到元素中?

java - 如何使用 RxJava 取消 Retrofit 中的单个网络请求?

session ID 问题 : Different id for vf and developer console

java - 我应该在 jsp/servlet 中注销做什么,因为单击后退按钮后 session.invalidate() 显示上一页

asp.net-mvc - VB.Net 中的 ASP.Net session

javascript - jQuery 显示隐藏菜单基础知识

javascript - JQuery:在元素的 HTML 之前附加项目

java - 更改 hibernate.cfg.xml 文件中的默认命名策略

java - OrientDB 边缘类继承被忽略