如何在ASP.NET MVC中关闭浏览器或选项卡时将用户注销?

时间:2014-05-13 13:32:53

标签: c# asp.net asp.net-mvc authentication form-authentication

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

1 个答案:

答案 0 :(得分:27)

在浏览器关闭时,您可以采取一些措施来确保用户已注销,但这取决于您如何设置FormsAuthentication Cookie:

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

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

    这会将cookie值附加到每个请求中的查询字符串。这种方法的问题是它不是很安全,它与SEO混淆。如果用户向任何人发送他们正在使用的URL,那么该人可以作为原始用户登录(可能不是您想要的)。至于“搞乱搜索引擎优化”,它会导致同一页面看起来与基于传入的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方法:

    没有万无一失的方法;您所能做的就是set the cookie expiration date to before now,并希望用户的浏览器能够合作。如果你真的,真的,真的,希望cookie消失,你总是可以尝试JavaScript方法,但如果用户禁用了JavaScript,这将无效。

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

    其他警告

    您使用哪种浏览器也很重要。 Chrome可以在后台运行,that keeps Session Cookies around until their timeout is hit -- they are not dropped when the browser is closed(我发现这很难)。

相关问题