ASP(经典)/IIIS 7.5-您可以在不刷新会话的情况下检查会话是否超时吗

ASP(classic)/IIS 7.5 - Can you check if Session has timed out without refreshing the session?

本文关键字:会话 刷新 情况下 检查 超时 是否 经典 IIIS ASP      更新时间:2023-09-26

我正在开发一个运行在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,因为这似乎会完全取消对Session的访问。

当您调用Session("username")时,实际上您正在刷新Session Object本身,这是正确的,因为您永远不会看到弹出窗口。

另一种选择是使用Global.ASA文件来实现函数Session_OnStart和Session_OnSend,以在数据库中创建SessionIDdate/time时存储它们,并且脚本可以检查记录。

您可以使用这两个函数从表中插入和删除会话信息。

全球。Asa Sintax(MSDN(