ASP(经典)/ IIS 7.5 - 你能否在不刷新会话的情况下检查Session是否超时?

时间:2014-05-07 21:09:19

标签: javascript ajax session asp-classic iis-7.5

我正在研究在IIS 7.5上运行的ASP经典应用程序。我试图在用户的窗口上抛出一个弹出覆盖图,如果他们的会话超时而没有他们不必与机器交互(例如,如果他们离开机器而忘记它,我想要这个弹出窗口当他们回来时等待他们)。

我实现了一个后台setInverval函数,该函数使用jQuery向名为ajax-check-session.asp的服务器上的页面发送ajax请求。

ajax-check-session.asp除了检查会话是否仍然存在以及Response.Write分别为10之外什么都不做。

会话检查有效,我可以从其他选项卡注销,弹出窗口将显示在使用该会话的任何其他选项卡中。但是,如果我只将标签单独保留20分钟(Session.Timeout值),弹出窗口就不会显示出来。我假设这是因为对ajax-check-session.asp的ajax请求每3秒刷新一次会话,因此永远不会超时。

以下是ajax-check-session.asp的代码:

<%Option Explicit 

Response.Write LoggedIn()


Function LoggedIn 
    Dim strUsername
    strUsername = Session("username")

    If strUsername = "" Or isNull(strUsername) Then
        LoggedIn = 0
    Else
        LoggedIn = 1 
    End If 

End Function 

%>

有没有人知道如果每隔3秒 访问此页面,事实上,我的会话是否会超时?如果是这样,您是否有任何关于替代技术的建议,以实现我的目标,或修复我的代码/服务器,这将允许此页面不刷新会话?

我尝试在此页面上使用<%@EnableSessionState=False%>,但我无法想出仍然可以检查会话是否已过期且此设置为false的方法,因为这似乎会撤消对{{{{}的访问权限1}}完全。

1 个答案:

答案 0 :(得分:1)

当你打电话Session("username")时它是正确的,事实上你正在刷新Session Object本身,因为你永远不会看到弹出窗口。

另一种方法是使用Global.ASA文件来实现函数Session_OnStartSession_OnEnd,以便在创建SessionIDdate/time时存储它们在数据库中,您的脚本可以检查记录。

您可以使用这两个功能插入和删除表格中的会话信息。

Global.Asa Sintax (MSDN)