使用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议的两种技术是:
-
使用WebConfigurationManager读取相关的configuration部分并获取超时值。
-
使用
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
的值设置超时。