10

当用户关闭选项卡或浏览器时,我需要注销用户,如何在 ASP.NET MVC 中执行此操作?

4

1 回答 1

28

您可以做一些事情来确保用户在浏览器关闭时退出,但这取决于您如何设置 FormsAuthentication cookie:

  1. 使用Cookieless=True.
  2. 将 FormsAuthenticationTicket 设置为不持久
  3. 用于FormsAuthentication.SetAuthCookie将持久性设置为false
  4. 使用 JavaScript 方法删除window.unload.

Cookieless=True方法:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="/Account/Login"
           protection="All"
           cookieless="true" //set to true   
  </authentication>
</system.web>

这会将 cookie 值附加到每个请求中的查询字符串。这种方法的问题是它不是很安全,并且会与 SEO 混淆。如果用户向任何人发送他们正在使用的 URL,则该人可以作为原始用户登录(可能不是您想要的)。至于“搞乱 SEO”,它会根据传入的 URL 导致同一页面看起来与 googlebot 不同。每个 QueryString 更改都会使其成为一个新 URL,如果有人使用它来发布链接;它将稀释给定实际 URL 的搜索结果。

FormsAuthenticationTicket方法

当您为用户设置身份验证 cookie 时,请将 Persistent 设置为False

如果您在 中执行此操作,则FormsAuthentication.SetAuthCookie这是默认设置。如果您使用FormsAuthenticationTicket该类,则必须指定 cookie 过期时间。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,                   //version
    "blah",              //Cookie Name 

);

FormsAuthentication.SetAuthCookie()方法

默认情况下,如果您不设置persistent,身份验证 cookie 将在会话结束时(当用户关闭浏览器时)过期。

FormsAuthentication.SetAuthCookie("CookieValue", false); //second argument is persistent'

JavaScript 方法:

没有万无一失的方法;您所能做的就是将 cookie 的过期日期设置为现在之前,并希望用户的浏览器能够配合。如果您真的、真的、真的想要 cookie 消失,您可以随时尝试 JavaScript 方法,但如果用户禁用了 JavaScript,这将不起作用。

window.addEventListener('unload', function(event) {
   document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
});

其他注意事项

您使用哪种浏览器也很重要。Chrome 具有在后台运行的能力,并且可以保持会话 Cookie 直到超时——当浏览器关闭时它们不会被丢弃(我发现这一点很困难)。

于 2014-05-13T13:47:32.657 回答