当用户关闭选项卡或浏览器时,我需要注销用户,如何在 ASP.NET MVC 中执行此操作?
1 回答
您可以做一些事情来确保用户在浏览器关闭时退出,但这取决于您如何设置 FormsAuthentication cookie:
- 使用
Cookieless=True
. - 将 FormsAuthenticationTicket 设置为不持久
- 用于
FormsAuthentication.SetAuthCookie
将持久性设置为false
- 使用 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 直到超时——当浏览器关闭时它们不会被丢弃(我发现这一点很困难)。