- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在用户 session 过期时自动重定向到登录页面。
我一直在位于应用程序每个页面顶部的包含文件中使用以下代码:
Session.Timeout = 60
Response.AddHeader "Refresh", CStr(CInt(Session.Timeout + 1) * 60)
Response.AddHeader "cache-control", "private"
Response.AddHeader "Pragma","No-Cache"
Response.Buffer = True
Response.Expires = 0
Response.ExpiresAbsolute = 0
If Session("accountID") = "" Then
Response.Redirect("http://www.mydomain.com/")
End If
这有效,但有非常小的错误。即使 session 仍然存在,页面也会时不时地刷新,而且它似乎在 60 分钟结束之前就刷新了!
谁能看出问题出在哪里,或者您能建议一种不同的方法吗?
最佳答案
鉴于您必须执行此客户端操作,我更喜欢 JavaScript/jQuery 和 AJAX 而不是该方法。下面是如何操作的示例。
本质上,您只是设置了一个 AJAX 调用来轮询一个脚本,该脚本返回(以 JSON 格式)用户是否登录;如果不是,那么您可以将它们转移到另一个页面。
这种方法的好处是你可以随时轮询;例如每 10 秒查看用户是否仍处于登录状态,而不必等待整整一个小时。这也意味着您不需要在代码中声明 session 超时数字,因此您可以将其留给 IIS 来确定。此外,如果用户在您系统的其他地方注销,或者您的应用程序池被回收并且他们的 session 被重置,这将很快检测到它。
我从您的个人资料中注意到您是狗仔队摄影师。我认为这是 DSLR 方法,响应 header 方法是廉价手机摄像头方法 :o。
要构建您的 session 检查器页面,请创建一个名为 session.asp 的文件(与其他文件位于同一文件夹中以简化操作)。放在里面:
<%
Response.ContentType = "application/json"
If Session("LoggedOn") Then
Response.Write "{""loggedOn"": true}"
Else
Response.Write "{""loggedOn"": false}"
End If
%>
如果用户已登录,则返回 {"loggedOn": true},如果未登录,则返回 {"loggedOn": false}。这就是我们将在您的其他页面上使用的内容,通过定期调用此页面并阅读响应来轮询他们是否已登录。
现在进入您最初包含 Response.AddHeader 代码的页面。删除所有代码,因为它会替换它。
首先确保您的页面上有对 jQuery 的引用:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
然后在这一行下面加上:
<script type="text/javascript">
$(document).ready(function() {
var checkLoggedOn = function() {
$.getJSON('session.asp', function(data) {
if (!data.loggedOn)
window.location.replace("http://stackoverflow.com");
});
};
// Call checkLoggedOn every x milliseconds
setInterval(checkLoggedOn, 30000);
});
</script>
如果一切顺利,它应该可以工作。我将上面的设置设置为每 30 秒 (30000) 轮询一次,但您可以将其增加/减少到您想要的任何值。
请注意,我从 https://stackoverflow.com/a/4928564/171703 借用了大部分代码和 https://stackoverflow.com/a/2709160/171703 .
根据下面的评论,如果您希望用户的 session 在超时数字之后过期(无论他们是否保持 session 事件),那么您可以这样做。
当用户登录时,为 LoginExpiration 设置一个新的 session 变量:
Session("LoginExpiration") = DateAdd("n", Session.TimeOut, Now())
这需要当前时间并向其添加 session 超时数字 - 为您提供他们的 session 应该被销毁的时间。
如果您现在将 session.asp 修改为以下内容,它会获取 LoginExpiration 数字并返回用户未登录的情况:
这是:
<%
Response.ContentType = "application/json"
LoggedOn = "false"
LoginExpiration = Session("LoginExpiration")
DateNow = Now()
If IsDate(LoginExpiration) Then
If DateNow < LoginExpiration Then
LoggedOn = "true"
End If
End If
Response.Write "{"
Response.Write """loggedOn"": " & LoggedOn & ", "
Response.Write """loginExpiration"": """ & LoginExpiration & """"
Response.Write "}"
%>
我已将 loginExpiration 数据放入 JSON 响应中,因此您也可以根据需要在客户端使用它。
关于asp-classic - 经典 ASP/ session 结束重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770868/
本文实例总结了常用SQL语句优化技巧。分享给大家供大家参考,具体如下: 除了建立索引之外,保持良好的SQL语句编写习惯将会降低SQL性能问题发生。 ①通过变量的方式来设置参数 好:
写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如果没有及时对CSS代码进行维护,CSS代码不断会越来越多。CSS代码交错复杂,像一张庞大的蜘蛛网分布在网站的各个位
所以我必须解决类的背包问题。到目前为止,我想出了以下内容。我的比较器是确定两个主题中哪一个是更好选择的函数(通过查看相应的(值,工作)元组)。 我决定迭代工作量小于 maxWork 的可能主题,并且为
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级
代码如下: 复制代码代码如下: USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun
最近收到一个工作要求,让我完成一个每天一次的Linux服务器巡检工作(服务器的版本为红帽6.4),不可以使用监控软件来操作。在这里,把我的巡检过程和巡检脚本放送给大家做一参考。 首先,巡检内容
可以在 Classic ASP 中动态创建“空”对象并创建对象属性吗? 以这个 JavaScript 示例为例: var sample = new Object(); sample.prop = "O
我正在向旧的经典 asp 站点添加功能,但遇到了一个有趣的问题。页面上的以下行导致有用的错误“需要对象:''” strServerName = Request.ServerVariables("ser
我有一个经典的 ASP 应用程序,我正在处理日期截止。我的服务器位于中部时间,但我在东部时间。发生的情况是我的应用程序认为它早了一个小时,而我的截止时间晚了一个小时。我敢肯定,如果用户在太平洋时间,他
我是经典 ASP 的初学者。需要拆分一个由逗号分隔的许多电子邮件组成的字符串,并使用稍后生成的附加代码将结果插入(逐个电子邮件)到表格中。每条记录都应该有一个电子邮件地址。问题是我陷入了数组范围错误。
这个问题已经有答案了: one condition, multiple events (2 个回答) 已关闭 6 年前。 如何用更小的语句替换 1,2,3..。我尝试将 1 放入 10,但显示错误。
我是 ExtJS 的新手,所以我不知道是否可能。 Google 只回答如何为图表制作工具提示,所以... 我需要制作一个带有工具提示的网格,当用户将鼠标放在单元格上时将显示该工具提示。在该工具提示中,
我正在使用一个非常奇怪的 VB 版本...它不需要我告诉它什么是什么,它想自己弄清楚。 在 C# 中,我可以轻松地对数组进行硬编码...在 VB 中则不然。 我想在调用函数时创建一个硬编码数组...但
我的数据库访问代码如下: set recordset = Server.CReateObject("ADODB.Recordset") set cmd1 = Server.CreateObject(
我有 html 按钮和文本框的代码:文本框是我输入文本的地方,以便我可以在表格上进行一些更改。 'textbox " /> 'button Clear 我现在需要做的是单击“清除”按
我有一个表单,提交后会通过电子邮件发送。该表单使用 JavaScript 进行验证。经典 ASP 处理表单,即获取输入的数据、创建然后发送电子邮件。有报道称正在提交空白表格。仅发送标题和 Logo 。
加载页面 A.asp 默认情况下正在执行,从那里开始执行电子邮件的情况,如果是电子邮件,我们将调用页面 B。我想在控件被执行时执行相同的电子邮件情况从页面 B 转移到页面 A。请帮助我。 Page A
我正在使用经典 ASP 开发一个项目,例如,我想添加一些用户作为临时列表,当我提交表单时,这些数据将保存到数据库中。 我知道如何在 asp.net 中使用它,但不知道如何在经典 asp 中使用它。 例
我有一个带有简单 html 表的经典 ASP 页面,我想根据从数据库中提取的未知数量的记录循环表行,但是,当我使用 do/while 循环循环记录时,我收到一条错误消息,指出 Either BOF o
嘿,一直在寻找一段时间,但我似乎找不到任何有关如何在经典 asp 中处理日期的信息。 现在,我需要一种方法来计算今年过去的天数。我正在考虑一个简单的函数,它将获取当前日期,然后使用 (day = 1,
我是一名优秀的程序员,十分优秀!