使用FormsAuthentication.SetAuthCookie存储更多信息

我正在使用aspx和c#设置login身份validationCookie。

FormsAuthentication.SetAuthCookie(UserName, True) 

我想在同一个cookie中存储更多的信息。 我可以将值添加到此身份validationcookie还是必须使用第二个http cookie?

基本上我正在寻找存储用户的Id所以我可以使用用户表行键访问数据库

谢谢,伊甸园

您可以将用户数据添加到FormsAuthenticationTicket,然后自行生成该Cookie。

在FormsAuthenticationTicket的MSDN文档中有一个示例。

编辑

请注意,在创build故障单时,需要设置超时时间,一般情况下,您希望与web.config中configuration的值相同。 不幸的是,在Framework 3.5或更低版本中, FormsAuthentication类不会公开这个超时。 对于解决方法,请使用对此连接反馈项目的响应中描述的技术之一。

UPDATE

连接反馈项目已不在那里,可悲的是。 希望你已经简要描述了这些技术是什么。

是的,遗憾的是微软已经放弃了历史上的Connect项目。 IIRC,他们build议的两种技术是:

  1. 使用WebConfigurationManager读取相关的configuration部分并获取超时值。

  2. 使用FormsAuthentication.GetAuthCookie创build一个cookie,使用FormsAuthentication.GetAuthCookie解密,解密并检查生成的FormsAuthenticationTicket

或者升级到.NET 4.x,其中有一个FormsAuthentication.Timeout属性。

看到这个问题的更多信息

只要对您有用,您就可以将任何您想要的内容放在auth cookie中。 也就是说,如果你要提供敏感信息,你至less应该encryption它,但是我build议不要把敏感信息放在那里。 你可以做一些事情:

 Forms.SetAuthCookie (UserName + "|" + UserId, true); 

然后,每当你需要用户名或用户名,就在那里。 只需加载cookie并parsing出所需的值即可。

同样, 我build议不要这样做,特别是如上所述 。 这就是说,这是可能的。 您应该创build存取方法来将数据拉回:

 public int CurrentUserId { get { int userId = 0; if (HttpContext.Current.Request.IsAuthenticated) { userId = Convert.ToInt32(HttpContext.Current.User.Identity.Name.Split('|')[1]); } return userId; } } public string CurrentUserName { get { string userName = string.Empty; if (HttpContext.Current.Request.IsAuthenticated) { userName = HttpContext.Current.User.Identity.Name.Split('|')[0]; } return userName; } } 

是的,使用“|”很聪明 把更多的信息。 如果微软有另一种重载的方法

 public static void SetAuthCookie(String userName, bool createPersistentCookie, string userData)` 

那么我们的生活会更容易,我们的代码会更安全。

将该用户标识作为用户名parameter passing。

 FormsAuthentication.SetAuthCookie(userId, True) 

你如何确保你的身份validation票?

您可以使用FormsAuthentication.Timeout.TotalMinutes根据web.config的值设置超时。