使用FormsAuthentication.SetAuthCookie存储更多信息
我正在使用aspx和c#设置登录的身份验证Cookie。使用FormsAuthentication.SetAuthCookie存储更多信息
FormsAuthentication.SetAuthCookie(UserName, True)
我想在同一个cookie中存储更多信息。我可以将值添加到此身份验证cookie还是必须使用第二个http cookie?
基本上我寻找而去存储用户的Id
,所以我可能可以使用用户表行键
感谢, 伊甸园
您可以添加用户数据到的FormsAuthenticationTicket,然后生成自己的cookie的。
the MSDN documentation for FormsAuthenticationTicket中有一个示例。
编辑
注意,创建票时,你需要设置超时时间,这在一般你会想是一样的web.config中配置的值。不幸的是,在Framework 3.5或更低版本中,FormsAuthentication
类不公开公开此超时。有关解决方法,请使用对this connect feedback item的响应中描述的技术之一。
UPDATE
连接反馈产品,就不再出现了,可悲。希望你已经简要描述了这些技术。
是的,这太遗憾了,微软已经放弃了历史上的Connect项目。 IIRC,这两种技术他们建议是:
使用WebConfigurationManager读取相关的配置部分,并获得超时值。
使用
FormsAuthentication.GetAuthCookie
创建cookie,使用FormsAuthentication.Decrypt
对其进行解密并检查生成的FormsAuthenticationTicket
。
或升级到.NET 4.x,其中有一个FormsAuthentication.Timeout
属性。
更多信息,请参见this question
通行证用户ID作为用户名来访问数据库PARAM。
FormsAuthentication.SetAuthCookie(userId, True)
您如何保护您的身份验证票?
我不想通过它_intead_的名称。我想添加更多的数据到相同的身份验证cookie。这是可能的吗? – Eden 2009-07-19 15:12:25
@Eden你解决了你的问题我正在使用同样的方法,但不知道如何最好地将userId和角色存储在同一张票中? – rogue39nin 2015-12-17 13:20:02
只要对您有用,您可以在auth cookie中放入任何您想要的内容。也就是说,如果你要提供敏感信息,至少应该对其进行加密,但我建议不要在那里放置敏感信息。你可以这样做:
Forms.SetAuthCookie (UserName + "|" + UserId, true);
然后,无论何时你需要用户名或用户名,它就在那里。只需加载cookie并解析出所需的值即可。
再一次,我建议不要这样做,特别是因为我已将它呈现在以上。这就是说,这是可能的。你应该创建存取方法来提取数据退了出来:
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;
}
}
我应该注意,我在这里提出的方式是“合适”的方式,并且可以工作,但如果我要这样做对整个系统的影响较小,我会使用乔提出的方法。 – andymeadows 2010-07-12 18:05:36
是的,它是明智的使用“|”把更多的信息。如果微软有另一种重载方法
public static void SetAuthCookie(String userName, bool createPersistentCookie, string userData)`
那么我们的生活会容易得多,我们的代码会更安全。
您可以使用FormsAuthentication.Timeout.TotalMinutes
根据web.config
中的值设置超时。
谢谢!这正是我正在寻找的! 它似乎重叠的行为FormsAuthentication.SetAuthCookie是asp.net 3.5(我没有时间使用反射器)只有一个小的差异。您可以将任意数据附加到cookie(不仅是名称)。 再次感谢! – Eden 2009-07-19 17:47:54