Asp.net:实现自动注销功能

问题描述 投票:7回答:5

我必须在我的一个项目中实现自动登出功能,但是我无法弄清楚从哪里开始寻找想法,但是SO

我需要的是,如果用户会话已过期,应用程序会将用户重定向到登录页面。请告诉我解决该要求的方法是什么。

问题陈述:如果用户在任何给定的登录实例中离开系统超过n分钟,则系统应自动将其注销。

asp.net ajax session-timeout logout
5个回答
17
投票

[评论和问题一样多,我不确定您是否正在寻找某种可以在一定时间后将用户登出,无论其处于活动状态还是处于闲置状态之后的内容。

如果您乐于使用标准的ASP.NET mechanisms,则无需任何主要工作即可为您完成:

设置您的membership provider

确保您的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“心跳”功能,或者如果他们在另一个网站上停留了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;
}

或者您是说通过按“后退”键,他们仍然可以通过浏览器缓存查看您的页面?在这种情况下,您需要在每个页面上都使用Cache标头:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

[好,在这种情况下,您还需要一个JS计时器对象来执行Location.Replace到您的登录页面-在每页的用户控件中(最好是在您的母版页中)将此控件自动n分钟后重定向用户:

<script type="text/javascript">
  setTimeout('location.Replace("/login.aspx")', 900000);
</script>

时间以毫秒为单位,因此这将在15分钟内将它们继续使用,而无需为此专门准备整个jQuery框架。

您可能还想研究meta refresh标签:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />

[这将迫使浏览器在15分钟后(以秒为单位)刷新到登录页面。

这已通过以下方式实现:

1)将每个请求(服务器和ajax(不包括会话检查ajax请求)到服务器的时间戳保存到会话变量中。

2)经常使用ajax通过JS函数通过JS函数轮询服务器,并检查会话时间戳记与ajax请求时间之间的时间差是否大于会话超时val,然后注销当前用户并返回一个该ajax请求的布尔值。

3)如果返回的布尔值为true,则将当前页面重定向到登录页面。

由于您不知道从哪里开始,您可能会发现这篇4guys文章很有用:http://www.4guysfromrolla.com/webtech/110701-1.shtml

编辑

[jQuery timer之类的声音可能很有用,如果您希望在已知时间段(即会话的有效期限)过去后重定向到某个网址,]]

希望这会有所帮助。


6
投票

这已通过以下方式实现:



0
投票

由于您不知道从哪里开始,您可能会发现这篇4guys文章很有用:http://www.4guysfromrolla.com/webtech/110701-1.shtml

© www.soinside.com 2019 - 2024. All rights reserved.