如何删除身份验证 Cookie

5
我正在开发ASP.NET MVC应用程序。在最新版本中,我进行了一些更改以保存一些额外的cookie信息。 我的一些客户仍在使用旧版本。 是否有任何方法可以使现有客户的现有cookie过期,并在连接到托管在IIS中的新应用程序时强制他们重新登录?
谢谢,

只需将cookie的日期设置为已过去的某个日期即可......这将确保用户再次登录。 - Pankaj Upadhyay
3个回答

22
你可以使用 SignOut 静态方法:
FormsAuthentication.SignOut();

这将删除认证 Cookie,在随后的请求中,用户将不再被认证。我强调了“随后”的词,因为在调用此方法后,您应该进行重定向。


我应该把这行代码放在哪里?我担心无论我把它放在哪里,都会强制用户每次都要登录... - Anand
@SutikshanDubey,你可以将这行代码放在某个控制器的动作中,当用户导航到该动作时,即可注销当前用户。 - Darin Dimitrov
这对我实际上没有起作用,但它让我找到了线索。我已经重建了aspnetdb,但浏览器中仍然有一个FormsAuthenticationCookie。然后我陷入了一个进退两难的境地,即Request.Authenticated==true,但GetUser()返回null;因此,没有用户可以注销。解决方案是删除浏览器上的所有cookie。 - Eric Nelson

4

我正在web.config文件中为我的cookie命名,这似乎解决了我的问题:

 <forms loginUrl="~/Account/LogOn" name="InsightWebMobileCookie2" timeout="10000" slidingExpiration="true" />

1

这里的问题是您无法读取cookie的过期日期,因此您不知道哪些用户是旧用户。

所以您的选择是:

  1. 如果您能够确定谁来自“旧”版本-有逻辑来使他们的cookie过期。
  2. 强制每个人注销一次,如果他们没有名为“VersionLogout”的cookie。一旦您强制注销他们,设置一个名为“VersionLogout”的cookie,例如值为1.2,这样您就知道您已经强制注销了特定版本的用户,他们(从现在开始)将不会再次被提示。

您可以将该代码放在global.asax中的Application_AuthenticateRequest事件中。此时,用户已经通过身份验证,因此您可以在那里检查他们的cookie。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接