2014-02-21 95 views
1

我一直被困在这个问题整个星期,我更恼火的事实,我必须修复这个应用程序,以满足我的公司工作的安全策略有......反正......经典ASP和会话超时 - 跟踪会话计时器?

我正在尝试跟踪经典ASP网络应用中的会话。我可以在我的gobal.asa文件的session_onstart子文件中设置session.timeout和session变量。它工作得很好:

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当会话过期Global.asa中(服务器端)
  2. 组会议( “LoggedOn”),以虚假的Session_OnEnd事件
  3. session.asp将返回false作为结果
  4. 将用户重定向到他们需要去的地方。

感谢,

尼克

+1

您是否阅读过该答案中的更新,它为您提供了一种使用另一个会话值来存储'DateAdd(“n”,Session.Timeout,Now())“的解决方案,可以确切地为您的会话何时到期。 – Lankymart

回答

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

+0

我在他的更新中尝试了他的代码。它不起作用。我必须修改他的原始代码才能正常工作。我确实采用了他的一些想法,使用日期和修改,以便它只是时间。我现在的问题是这个代码在我的session.asp文件中:'If(Cint(DateDiff(“s”,Session(“LoginExpiration”),Time())))> 0 Then response.write“{”“loggedOn “”:true}“ Else response.write”{“”loggedOn“”:false}“ End If'在1分钟后总是返回false,它应该返回true ...我不明白为什么它是不。 – NickD

0

最后,会议决定,这是不值得升级此项目,我们要保持它在只能在内部访问的域上安装修复程序不是必需的。