我们希望在会话结束时将用户注销,因此一种方法是让JavaScript在会话时间段过后将用户重定向到注销脚本。但是,如果用户打开了多个选项卡,则可以在不可见的选项卡上激活JavaScript并将用户注销。我们不能进行AJAX调用,因为这会重置会话时间长度。在会话结束时,处理注销多个标签的用户的好方法是什么?
编辑:会话在一段时间后在服务器上到期。 JavaScript就是将用户重定向到注销页面,以便内容不会留在屏幕上。
答案 0 :(得分:2)
使会话cookie过期。 Cookie可以设置为在浏览器关闭时或在一段时间后过期。见http://en.wikipedia.org/wiki/HTTP_cookie#Expires_and_Max-Age
答案 1 :(得分:1)
为什么你依赖javascript?将他登录到服务器上然后打开标签并不重要。
答案 2 :(得分:1)
如果用户已登录,则必须轮询服务器。您可以根据AJAX或WebSockets执行此操作。如果cookie过期,也许您可以自动重定向但我不确切知道您是否可以检查每个JavaScript的到期日期。
答案 3 :(得分:0)
我有一个MVC应用程序,成功登录后,我在Layout.cshtml中设置了登录存储值
$(document).ready(function () {
function loginStorageChange(event) {
if(window.localStorage.getItem('loginStorage') === null) {
setTimeout(function() { location.reload(); }, 1000);
}
}
window.localStorage.setItem('loginStorage', true);
window.addEventListener('storage', loginStorageChange, false);
});
在注销时,我在提交表单之前删除了loginStorage
function logoutSubmit() {
window.localStorage.removeItem('loginStorage');
$('#logoutForm').submit();
}
因此,当窗口检测到登录存储已更改从而重新加载页面时,服务器会指示注销并重定向到登录页面。