【问题标题】:Redirect after inactivity in ASP using Session.Timeout使用 Session.Timeout 在 ASP 中不活动后重定向
【发布时间】:2013-09-22 09:59:47
【问题描述】:

我有一个用经典 ASP 编写的 Intranet 应用程序。

每当用户处于非活动状态的时间超过会话时间时,我希望他们所在的页面重新加载,这会将他们重定向回登录页面,因为会话变量将为空。

我尝试了一堆解决方案,但似乎没有一个能在所有浏览器中可靠运行。

IE 给我带来的问题最多也就不足为奇了。

无论如何,在我的登录脚本中,我将会话超时设置为:

Session.Timeout = 15

我尝试使用元刷新标签,但在 IE(所有版本)中有时它会起作用,有时它不会,我不知道为什么。我会采取会话超时并像这样添加一秒:

<meta http-equiv="refresh" content="<% = CInt(Session.Timeout + 1) * 60  %>;url=/?timeout=true" />

有时 IE 会进行刷新,而有时它会坐在那里。我知道会话超时,因为当浏览器不执行刷新时,如果我点击刷新,我会被定向到登录页面。

元刷新和我缺少的 IE 有什么奇怪的地方吗?

我尝试的第二种方法是使用 JavaScript。由于需要为 Intranet 应用程序启用 JavaScript,这似乎是我实现的一个不错的选择:

<% iTimeout = CInt((Session.Timeout * 60) + 1) * 1000 %>
<script>window_refresh = window.setTimeout(function(){window.location.href=window.location.href+"?timeout=true"},<% = iTimeout %>);</script>

现在这可以可靠地重新加载页面,但似乎服务器上的计时器和浏览器中 JavaScript 使用的计时器已关闭,因为有时重新加载页面时,会话仍然有效。

我已尝试将 +1 更改为 +60,并且大多数情况下都可以,但即便如此,有时页面会在会话仍然有效时刷新。

我是否正确地处理了这个问题?

【问题讨论】:

    标签: javascript jquery session asp-classic timeout


    【解决方案1】:

    我肯定也会通过 JavaScript 来解决这个问题。

    但是,我不会将用户重定向回登录页面,而是创建某种每隔几分钟运行一次的 keepalive 脚本,以确保如果用户仍然在浏览器中打开页面,会话永远不会超时。
    如果在您的情况下由于某种原因这不是一个可用的解决方案,我至少会记得提醒用户重定向即将发生,以避免突然的重定向完全让用户感到惊讶。

    无论如何..回答你的问题:

    您的页面是否还加载其他资源,例如图像、样式表和其他内容?

    此类文件是在处理 HTML 之后加载的,如果 JavaScript 超时在最后一个文件加载之前启动,您可能会遇到 JavaScript 超时在会话超时启动之前启动的情况。

    在这种情况下,JavaScript 超时将在会话超时之前触发,这使得重定向发生在会话超时之前。

    您说您已尝试将额外秒数增加到 60 秒,但有时问题仍然存在。您确定在 JavaScript 超时启动后没有加载任何文件吗?我会对此进行一些调查,因为这听起来像是重置了系统中的会话超时。

    【讨论】:

    • 元刷新似乎是最不可靠的,所以我同意,我在这里坚持使用 JavaScript。我很确定超时开始后什么都没有加载。我正在改变的一件事是 CInt((Session.Timeout * 60) + 1) * 1000CInt((Session.Timeout + 1) * 60) * 1000 看看是否有帮助。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多