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

Session 经典ASP和会话超时-跟踪会话计时器?,session,time,asp-classic,Session,Time,Asp Classic,我整个星期都在解决这个问题,我非常恼火,因为我必须修复这个应用程序以满足我工作的公司的安全策略。。。无论如何 我试图在一个经典的ASP web应用程序中跟踪会话。我可以在gobal.asa文件的session_onstart子文件中设置session.timeout和session变量。它工作得很好: Sub Session_OnStart Session("LoggedOn") = true Session.Timeout = 5 End Sub 接下来,在一页上(为了测试这个问题的解决方案

我整个星期都在解决这个问题,我非常恼火,因为我必须修复这个应用程序以满足我工作的公司的安全策略。。。无论如何

我试图在一个经典的ASP web应用程序中跟踪会话。我可以在gobal.asa文件的session_onstart子文件中设置session.timeout和session变量。它工作得很好:

Sub Session_OnStart
Session("LoggedOn") = true
Session.Timeout = 5
End Sub
接下来,在一页上(为了测试这个问题的解决方案),我已经从中实现了akiller的解决方案

我需要修改代码,使其如下所示:

session.asp
<%
Response.ContentType = "application/json"
If Session("LoggedOn") = true Then
Response.Write "{""loggedOn"": true}"
Else 
Response.Write "{""loggedOn"": false}"
End If
%>
session.asp
以及:


$(文档).ready(函数(){
var checkLoggedOn=函数(){
$.getJSON('session.asp',函数(数据){
如果(data.loggedOn=false){
警报(data.loggedOn);
//需要在会话时间到期时发出警报,然后才能使用重定向。
//window.location.replace(“http://stackoverflow.com");
}
});
};
//每隔x毫秒调用checkLoggedOn
设置间隔(checkLoggedOn,30000);
});
现在,我需要做的是找出如何检查会话到期前还有多少时间。虽然我可以使用Javascript代码运行类似于上面客户端的检查器,但必须从服务器上检查会话中剩余的时间(以防止客户端会话被入侵)

这是我要完成的最后一步

  • 触发会话。会话过期时放弃(服务器端)
  • 在global.asa中的Session_OnEnd事件中将Session(“LoggedOn”)设置为false
  • session.asp将返回false作为结果
  • 将用户重定向到他们需要去的地方
  • 谢谢

    尼克

    简短回答:见

    更详细的回答是:你不能做你想做的事

  • 每次当您在当前会话处于活动状态时打开请求页面时,ASP都会在
    timeout
    此页面中指定的值上自动延长会话生存期。在这种情况下,会话将一直有效,直到IIS重新启动

  • Session\u oned
    中为Session collection设置任何值都是毫无意义的:此事件完成后,ASP将销毁所有Session collection对象并从ASP进程中删除SessionID

  • 请记住,调用
    会话.放弃
    不会立即调用事件
    会话
    :请参阅MSDN


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

    您是否阅读了该答案中的更新,它为您提供了一种使用另一个会话值来存储
    DateAdd(“n”,session.Timeout,Now())的解决方案
    为您提供会话到期的确切时间。我在他的更新中尝试了他的代码。它不起作用。我不得不修改他的原始代码,这样它才能正常工作。我确实采纳了他的一些想法,使用了日期,并对其进行了修改,这样就正好赶上了时间。我现在的问题是session.asp文件中的代码:
    如果(Cint(DateDiff(“s”,session(“loginexrition”),Time())>0,那么response.write“{”“loggedOn”“:true}”Else response.write“{”“loggedOn”“:false}”End如果
    在1分钟后总是返回false,它应该返回true。。。我不明白为什么不是。
    <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>