gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:30:52 24 4
gpt4 key购买 nike

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

最佳答案

您可以执行一些操作来确保在浏览器关闭时用户已注销,但这取决于您如何设置 FormsAuthentication cookie:

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

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 将在 session 结束时过期(当用户关闭浏览器时)。

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 (我很难发现这一点)。

关于c# - 在 ASP.NET MVC 中关闭浏览器或选项卡时如何注销用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com