我整个星期都一直坚持这个问题而且我非常恼火于我必须修复这个应用程序以满足我工作的公司的安全策略......反正...
我正在尝试跟踪经典ASP网络应用中的会话。我能够在我的gobal.asa文件的session_onstart子中设置session.timeout和会话变量。它运作得很好:
Sub Session_OnStart
Session("LoggedOn") = true
Session.Timeout = 5
End Sub
接下来,在一个页面上(为了测试这个问题的解决方案),我已经实现了here的akiller解决方案。
我需要将代码修改为如下所示:
session.asp
<%
Response.ContentType = "application/json"
If Session("LoggedOn") = true Then
Response.Write "{""loggedOn"": true}"
Else
Response.Write "{""loggedOn"": false}"
End If
%>
和
<script type="text/javascript">
$(document).ready(function () {
var checkLoggedOn = function () {
$.getJSON('session.asp', function (data) {
if (data.loggedOn = false){
alert(data.loggedOn);
//Need to get alert working when session time expires before redirect can be used.
//window.location.replace("http://stackoverflow.com");
}
});
};
// Call checkLoggedOn every x milliseconds
setInterval(checkLoggedOn, 30000);
});
</script>
现在,我需要做的是找出如何检查会话到期前剩余的时间。虽然我可以使用Javascript代码来运行像客户端一样的检查程序,但是必须从服务器检查会话中剩余的时间(以防止客户端会话被黑客攻击)。
所以这是我要完成的最后一步。
谢谢,
尼克
答案 0 :(得分:3)
简短回答:见this comment by Lankymart。
更详细的回答:你无法做你想做的事。
每当您在当前会话处于活动状态时的请求页面时,ASP将自动延长此页面中指定的timeout
值的会话生命周期。在这种情况下,会话将一直存在,直到IIS重新启动。
在Session_OnEnd
中将任何值设置为Session集合是没有意义的:在此事件完成后,ASP将销毁所有Session集合对象并从ASP进程中删除SessionID。
请注意,调用Session.Abandon
不会立即调用事件Session_OnEnd
:请参阅MSDN http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx
答案 1 :(得分:0)
最终,决定不值得升级此项目,我们将把它保留在只能在内部访问的域上,因此不需要安全修复。