我有几个需要用户登录的网页。这些页面经常使用 jQuery 进行 Ajax 调用。当进行 Ajax 调用时,服务器能够(通过会话 cookie)识别用户是否登录。这都是非常标准/基本的东西。
我的问题是有时会话变得无效,即使页面仍在浏览器中。例如,用户登录到站点,做一些工作 - 然后离开几个小时。返回后,用户的浏览器仍在页面上,用户尝试进行 Ajax 调用。此 Ajax 调用现在失败,因为用户的会话已超时。另一个例子是多个设备。用户在他/她的办公桌前浏览并打开浏览器,然后用户出于任何原因使用另一台机器或设备登录到该站点。第二个设备使第一个会话无效(在这个特定公司,每个用户 ID 只允许一次登录)。返回到第一个框后,用户尝试了一个失败的 Ajax 操作。
请注意,我担心的不是安全问题——系统在这方面工作正常,确保用户在尝试进行 Ajax 调用时具有有效的会话。问题是当用户的会话超时时,它没有得到妥善处理。如果用户在其中一种情况下做了很多工作(比如填写了很长的表单),然后尝试使用 Ajax 保存表单,则保存将失败。用户唯一能做的就是在另一个选项卡中登录系统,然后返回失败的选项卡并重试。不是很优雅。
这一定是一个常见问题,但我不确定解决方案。理想情况下,我想要的是:如果由于用户没有有效会话而导致 Ajax 调用失败,则弹出一个允许用户登录的对话框,然后自动重试该操作。
我不知道,我的客户端代码中可能有 50 个 Ajax 调用。有什么办法可以在全球范围内做到这一点?如果有某种简单的 jQuery 解决方案,那就太好了。人们尝试了什么?