javascript - 使用 Session.Timeout 在 ASP 中不活动后重定向

标签 javascript jquery session asp-classic timeout

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

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

我尝试了很多解决方案,但似乎没有一个能在所有浏览器上可靠地工作。

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

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

Session.Timeout = 15

我尝试使用 meta refresh 标签,但在 IE(所有版本)中有时它会起作用,有时它不会,我不明白为什么。我会采取 session 超时并像这样添加一秒钟:

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

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

元刷新和 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 计时器已关闭,因为有时重新加载页面时, session 仍然有效。

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

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

最佳答案

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

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

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

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

像这样的文件是在处理 HTML 之后加载的,如果在加载最后一个文件之前开始 JavaScript 超时,您可能会遇到 JavaScript 超时在 session 超时开始之前开始的情况。

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

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

关于javascript - 使用 Session.Timeout 在 ASP 中不活动后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858741/

相关文章:

javascript - 如何用自定义变量替换 DJANGO 中 JAVASCRIPT 脚本生成的 Google map key

javascript - 使用 jQuery Mobile 在子页面上包含脚本?

javascript - 单击时切换音频?

c# - IStatelessSession 多对一插入对象

javascript - 在构造函数模块内维护 'this' 的范围

javascript - React 状态存储和输出重复值

javascript - 使用 jQuery 滚动 iframe

对话框中的 jquery 日期选择器

php登录表单密码无效消息问题

session - HttpSession 数据存储在哪里?