我必须在我的一个项目中实现自动注销功能,我只是想知道从哪里开始寻找想法,但 SO 。
如果用户会话已过期,我需要的是应用程序将用户重定向到登录页面。 请告诉我应该采取什么方法来解决这个问题。
问题陈述: 如果用户在任何给定的登录实例中离开系统超过n分钟,系统应自动将其注销。
答案 0 :(得分:16)
和问题一样继续发表评论,我不确定你是否会在一段时间之后将用户注销,无论是活动,还是只是在一段时间不活动之后。
如果您愿意使用标准ASP.NET mechanisms,可以在没有任何重大工作的情况下为您完成此操作:
确保您的authentication section定义了loginUrl:
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
您可以使用forms element上的“超时”属性设置默认30分钟以外的超时时间:
<authentication mode="Forms">
<forms loginUrl="login.aspx" timeout="15"/>
</authentication>
这将在您的网站停用15分钟后将用户注销(浏览器打开时没有javascript“heartbeat”或者他们在另一个网站上花了15分钟)。
拒绝匿名用户访问
<authorization>
<deny users="?" />
</authorization>
然后确保使用location Element:
可以访问所有用户的登录,注册和可能忘记的密码页面<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继承,而是从基页类继承(这种设置的一个示例做类似的操作 - 检查每个页面上的设置)可以在my answer here
中看到你的登录页面可能需要有一些破坏JS的框架才能跳出iFrame:
if (top!=self.parent){
top.location=self.parent.location;
}
或者你是说通过按“返回”他们仍然可以通过浏览器缓存看到你的页面?在这种情况下,您需要在每个页面上使用缓存标头:
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 :(得分:6)
这是通过以下方式实现的:
1)将每个请求(服务器和ajax,不包括会话检查ajax请求)的时间戳保存到会话变量中。
2)以频繁的间隔使用ajax通过JS函数轮询服务器,并检查会话时间戳和ajax请求时间之间的时间差是否大于会话超时val然后注销当前用户并返回那个ajax请求的bool。
3)如果返回的bool为真,则将当前页面重定向到登录页面。
答案 2 :(得分:1)
答案 3 :(得分:0)
由于您不知道从哪里开始,您可能会发现这篇4guys文章很有用:http://www.4guysfromrolla.com/webtech/110701-1.shtml
修改强>
如果您想在经过一段已知时间后(即会话有效期)重定向到网址,则jQuery timer可能会很有用。
希望这有帮助。