在构建监视器时,它将监视用户在浏览器上的任何活动,例如单击按钮或在文本框中键入(而不是鼠标悬停在文档上)。因此,如果用户长时间没有活动,会话就会超时。
我们需要在没有 jQuery 或类似的东西的情况下做到这一点。我可能会使用ajax。另一端的 Java servlet 更好。
您建议的方法的问题是,即使用户移动鼠标或输入内容,会话也会超时。因此,如果您将会话超时设置为 20 分钟,并且用户持续键入 21 分钟,则会话仍会超时,即使它们一直处于“活动”状态。唯一可以防止会话超时的是向服务器发出新请求。
解决方案1:让服务器控制会话超时
除非您在后台发出 Ajax 请求,否则会不断更新会话,否则您可以在页面加载时设置 JavaScript 超时,并以这种方式提醒用户。除非你向服务器发出其他请求,当用户在你的页面上时,没有必要让它变得困难:
setTimeout(function () {
alert("You've timed out baby!");
}, 1200000); // 20 minutes in millisec (modify to your session timeout)
如果用户访问另一个页面或重新加载该页面,则会更新会话并重置 JavaScript 计时器。如果用户不这样做,会话将在用户收到警报的同时超时。
解决方案2:让客户端控制会话超时
如果您希望 JavaScript 完全控制会话持续的时间,以便每当用户键入、移动鼠标或其他任何操作时都会更新会话,那么您也必须继续在后台向服务器发出 Ajax 请求,因此会议续会。 (这可能是一个空的虚拟请求,只是一些到达服务器的东西)
然后,您必须跟踪您认为“用户活动”的所有操作(AnhSirk 在他的回答中建议了一种方法),并在发生此类事件时重置超时计时器。如果用户处于非活动状态的时间过长,则您必须向服务器上的页面发出 Ajax 请求,这会使会话无效,然后您可以警告用户会话已超时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)