2012-01-12 75 views
4

我正在开发ASP.NET MVC应用程序。我做了一些更改,以在最新版本中保存cookie中的一些额外信息。 我的客户很少仍在运行旧版本。 有什么办法可以让我现有客户的现有cookie过期,并强制他们在连接到IIS托管的新应用程序时再次登录?如何删除身份验证Cookie

感谢,

+0

只需将cookie的日期设置为某些已过期日期....它应确保用户再次登录 – 2012-01-12 13:28:25

回答

17

你可以使用SignOut静态方法:

FormsAuthentication.SignOut(); 

这将删除身份验证cookie和随后请求用户将无法通过身份验证。我强调后续这个词,因为在调用这个方法之后,你应该重定向。

+0

我应该在哪里放置该行。我害怕,无论我在哪里放这条线,它都会强制用户每次都登录... – 2012-01-12 13:35:40

+0

@SutikshanDubey,您将此行放在某些控制器操作中,您想要在当前用户导航时签署该操作。 – 2012-01-12 13:36:38

+0

这实际上并不适合我,但它让我走上了小路。我重建了aspnetdb,但浏览器中仍然存在FormsAuthenticationCookie。我当时在Request.Authenticated == true的catch-22中,但GetUser()返回null;因此,没有用户注销。解决方案是删除浏览器上的所有cookie。 – 2015-12-04 02:00:13

4

我给新的名字我在web.config中的cookie,而这似乎解决我的问题: -

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

这里的问题是你无法读取cookie的有效期,所以你不知道来自旧用户的cookie。

那么你的选择是:

  1. 如果你能找出谁是“旧”版本 - 有逻辑到期的Cookie。
  2. 强制每个人都注销一次,如果他们没有名为“VersionLogout”的cookie。一旦你强制注销,例如设置一个名为“VersionLogout”的cookie值为1.2,这样你就知道你已经强制他们注销某个特定的版本,并且他们(未来)不会再被提示。

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