我必须在我的一个项目中实现自动注销功能,我只是不知道从哪里开始寻找想法,但是SO。
如果用户会话已过期,我需要应用程序将用户重定向到登录页面。请告诉我我应该采取什么方法来解决这个要求。
问题陈述: 如果用户在任何给定的登录实例中离开系统超过 n 分钟,系统应自动将其注销。
我必须在我的一个项目中实现自动注销功能,我只是不知道从哪里开始寻找想法,但是SO。
如果用户会话已过期,我需要应用程序将用户重定向到登录页面。请告诉我我应该采取什么方法来解决这个要求。
问题陈述: 如果用户在任何给定的登录实例中离开系统超过 n 分钟,系统应自动将其注销。
继续评论和问题一样多,我不确定您是否想要在一段时间后将用户注销,无论活动如何,或者只是在一段时间不活动之后。
如果您乐于使用标准的ASP.NET 机制,则无需任何主要工作即可为您完成:
设置您的会员提供商。
确保您的身份验证部分定义了 loginUrl:
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
您可以使用表单元素上的“超时”属性设置默认 30 分钟以外的超时:
<authentication mode="Forms">
<forms loginUrl="login.aspx" timeout="15"/>
</authentication>
这将在用户在您的站点上闲置 15 分钟后注销(在浏览器打开且没有 javascript“心跳”的情况下,或者如果他们在另一个站点上花费 15 分钟)。
拒绝匿名用户访问
<authorization>
<deny users="?" />
</authorization>
然后确保使用location 元素的所有用户都可以访问您的登录、注册和可能忘记的密码页面:
<location path="Logon.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<!-- etc -->
这样,当用户的身份验证 cookie 过期时,他们将被重定向到表单页面的 loginUrl 元素中指定的 URL。
如果您没有使用标准的 ASP.NET 机制,那么您最好实现“基页”类型模型。
创建一个继承自 System.Web.UI.Page 的新类,它将检查用户的登录状态,如果他们没有登录/超时,则将它们重定向到您的登录页面。
在要锁定的页面中,您可以从基页面类继承而不是从 System.Web.UI.Page 继承(这种设置的示例以执行类似的操作 - 检查每个页面上的设置)在我的回答中看到
您的登录页面可能需要在其中包含一些破坏框架的 JS 才能跳出 iFrame:
if (top!=self.parent){
top.location=self.parent.location;
}
或者您是说按“返回”他们仍然可以通过浏览器缓存看到您的页面?在这种情况下,您需要在每个页面上使用 Cache 标头:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
好的,那么,在这种情况下,您还需要一个 JS 计时器对象来执行 Location.Replace 到您的登录页面 - 在每个页面的用户控件中(或者更好的是,在您的母版页面中)都有这个以自动重定向n分钟后的用户:
<script type="text/javascript">
setTimeout('location.Replace("/login.aspx")', 900000);
</script>
时间以毫秒为单位,因此这将在 15 分钟内移动它们,而无需为此准备整个 jQuery 框架。
您可能还想查看元刷新标签:
<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />
这将强制浏览器在 15 分钟后刷新到登录页面(以秒为单位)。
这是通过以下方式实现的:
1)将每个请求(服务器和ajax,不包括会话检查ajax请求)的时间戳保存到服务器到会话变量中。
2) 使用 ajax 频繁地通过 JS 函数轮询服务器,并检查会话时间戳和 ajax 请求时间之间的时间差异是否大于会话超时 val 然后注销当前用户并返回 bool for那个ajax请求。
3) 如果返回的布尔值为真,则将当前页面重定向到登录页面。
由于您不知道从哪里开始,您可能会发现这篇 4guys 文章很有用:http ://www.4guysfromrolla.com/webtech/110701-1.shtml
编辑
如果您想在经过一段已知的时间(即您的会话到期时间)后重定向到一个 url,那么听起来jQuery 计时器可能会很有用。
希望这可以帮助。