经典ASP和会话超时 - 跟踪会话计时器?

时间:2014-02-21 21:10:44

标签: session time asp-classic

我整个星期都一直坚持这个问题而且我非常恼火于我必须修复这个应用程序以满足我工作的公司的安全策略......反正...

我正在尝试跟踪经典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代码来运行像客户端一样的检查程序,但是必须从服务器检查会话中剩余的时间(以防止客户端会话被黑客攻击)。

所以这是我要完成的最后一步。

  1. 会话到期时触发Session.Abandon(服务器端)
  2. 在global.asa的Session_OnEnd事件中将会话(“LoggedOn”)设置为false
  3. session.asp将返回false
  4. 将用户重定向到他们需要去的地方。
  5. 谢谢,

    尼克

2 个答案:

答案 0 :(得分:3)

简短回答:见this comment by Lankymart

更详细的回答:你无法做你想做的事。

  1. 每当您在当前会话处于活动状态时的请求页面时,ASP将自动延长此页面中指定的timeout值的会话生命周期。在这种情况下,会话将一直存在,直到IIS重新启动。

  2. Session_OnEnd中将任何值设置为Session集合是没有意义的:在此事件完成后,ASP将销毁所有Session集合对象并从ASP进程中删除SessionID。

  3. 请注意,调用Session.Abandon不会立即调用事件Session_OnEnd:请参阅MSDN http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

答案 1 :(得分:0)

最终,决定不值得升级此项目,我们将把它保留在只能在内部访问的域上,因此不需要安全修复。