我们遇到了一个用户注销的场景,并重播了之前的好会话cookie(包括滑动时间窗口),我们的代码以用户身份直接跳转到所请求的页面。我们没有在服务器中维护会话状态。这个Asp.Net形成了身份验证。
我认为唯一的解决方案是向服务器添加列以跟踪用户日志状态。不是很难,但需要代码,数据库和部署来完成。
这是处理此问题的最佳方法吗?因为无论如何我们都必须破解代码,我们可以将客户端请求ip和其他内容添加到cookie中。但目前的欺骗是重用客户端机器以及会话。
有什么想法吗?
提前致谢
BILLE
检查不活动的Javascript代码 - >注销
$j(document).ready(function () {
/******************************************************************
Auto-logout after the user's session times out
******************************************************************/
var timeOut = (_TIMEOUT - 5) * 60;
var setTimeout = function () {
$j(".session-timeout").stopTime().oneTime(timeOut + "s", function () {
$j(this).show();
$j(this).oneTime("300s", function () {
window.location = $j(this).find("a.logout").attr("href");
});
});
};
$j(".session-timeout a.refresh-session").click(function () {
NextGen.CHS.UtilitiesWebService.RefreshSession(
function () {
$j(".session-timeout").fadeOut();
setTimeout();
},
function () {
}
);
});
setTimeout();
});
/******************************************************************
Auto-logout after the user's session times out
******************************************************************/
var timeOut = (_TIMEOUT - 5) * 60;
var setTimeout = function () {
$j(".session-timeout").stopTime().oneTime(timeOut + "s", function () {
$j(this).show();
$j(this).oneTime("300s", function () {
window.location = $j(this).find("a.logout").attr("href");
});
});
};
$j(".session-timeout a.refresh-session").click(function () {
NextGen.CHS.UtilitiesWebService.RefreshSession(
function () {
$j(".session-timeout").fadeOut();
setTimeout();
},
function () {
}
);
});
setTimeout();
});
答案 0 :(得分:0)
我最终通过跟踪用户登录/退出状态和活动时间戳来解决此问题。收到重播会话后,我们仍然会解密表单票证并找到有效的“会话”信息。这标识了用户,然后检查是否已注销,如果是,则重定向到登录页面。
如果用户在未注销的情况下终止浏览器,则活动时间戳将用于扫描注销非活动用户的用户表的sql作业。
weidson