【问题标题】:Classic ASP session timeout quandry经典的 ASP 会话超时问题
【发布时间】:2013-11-26 04:36:04
【问题描述】:

我很困惑。我们的每个员工都必须登录到我们的服务器,这才开始他们的 ASP 会话。我所做的所有研究表明,我们应该能够使用session.timeout x 更改此会话的持续时间,其中 x 是我们希望会话持续的分钟数,默认为 20 分钟。我已更改此超时,但没有任何一致的结果。

我终于设置了一个功能,检查我是否每 10 秒登录一次,看看我是否可以确定一致的会话长度。到目前为止,经过 8 次试验,时间从 7 小时到 40 小时不等。我在 chrome 和 firefox 浏览器中都这样做了,以查看不同的会话时间,并且它们总是在完全相同的时间超时。但是,同事们不会在这些确切时间超时。

我读过一些关于 global.asa 的文章。我们要么没有使用它,要么我们都没有足够了解它知道它在哪里。

我还阅读并尝试更改 IIS 中应用程序池的超时会话。我是从 Windows 7 开始做的,大多数教程都是针对旧版本的 Windows,但我相信我找到了正确的地方,但我仍然找不到我所做的更改有什么不同。

tl;dr - 有没有办法找出经典 ASP 会话的剩余时间?

【问题讨论】:

    标签: session iis asp-classic iis-7.5 session-timeout


    【解决方案1】:

    有几个因素会影响超时长度以及可以设置长度的几个地方。 IIS 有它自己的默认值,也可以在逐个站点的基础上进行设置。您也可以按照您的建议使用session.timeout 在您的应用程序代码中设置它。

    如果您创建了一个函数来检查是否存在活动会话,则该函数本身可能会在每次触发时保持会话处于活动状态。这就是您遇到如此长时间会话超时的原因。

    如果用户在指定的时间段内没有请求或刷新应用程序中的页面,会话将自动结束。

    global.asa 是您可以创建并包含在 Web 应用程序的根文件夹中的文件。如果您想要或需要一个,那么只需创建它。

    格式应该是这样的;

    <script language="vbscript" runat="server">
    
    sub Application_OnStart
        'some code
    end sub
    
    sub Application_OnEnd
        'some code
    end sub
    
    sub Session_OnStart
        'some code
    end sub
    
    sub Session_OnEnd
        'some code
    end sub
    
    </script>
    

    为了控制会话的长度,您可以指定一个值;

    Sub Application_OnStart
        Session.Timeout = 30 '30 mins
    End Sub
    

    我发现并现在使用的更准确的解决方案之一是在数据库或 cookie 中记录每个特定用户的初始登录时间戳和上次活动的时间戳。然后将当前时间戳与存储的数据进行比较,以确定会话是否应该结束。您还可以使用这种方法在设定的不活动时间后自动将客户端重定向到登录页面,或显示“您的会话已过期”样式消息。

    【讨论】:

    • 好吧,这让我走上了正轨。我删除了检查会话是否超时的 ajax 函数,现在看来我得到了一致的 2 分钟超时(我在 IIS 中设置的时间,而不是 session.timeout)。有某种一致的理由是相当大的。但是,如果我每 10 秒的 ajax 调用都是刷新会话,那我怎么会退出呢?
    • @Aarmora 处理会话状态的 IIS 应用程序池通常会自动回收,具体取决于您的应用程序池回收设置。这将强制会话过期,尽管通常每天不超过一次。默认是每 1740 分钟回收一次。
    猜你喜欢
    • 1970-01-01
    • 2014-05-23
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多