使用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,这两种技术他们建议是:

  1. 使用WebConfigurationManager读取相关的配置部分,并获得超时值。

  2. 使用FormsAuthentication.GetAuthCookie创建cookie,使用FormsAuthentication.Decrypt对其进行解密并检查生成的FormsAuthenticationTicket

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

更多信息,请参见this question

+0

谢谢!这正是我正在寻找的! 它似乎重叠的行为FormsAuthentication.SetAuthCookie是asp.net 3.5(我没有时间使用反射器)只有一个小的差异。您可以将任意数据附加到cookie(不仅是名称)。 再次感谢! – Eden 2009-07-19 17:47:54

通行证用户ID作为用户名来访问数据库PARAM。

FormsAuthentication.SetAuthCookie(userId, True) 

您如何保护您的身份验证票?

+5

我不想通过它_intead_的名称。我想添加更多的数据到相同的身份验证cookie。这是可能的吗? – Eden 2009-07-19 15:12:25

+1

@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; 
    } 
} 
+0

我应该注意,我在这里提出的方式是“合适”的方式,并且可以工作,但如果我要这样做对整个系统的影响较小,我会使用乔提出的方法。 – andymeadows 2010-07-12 18:05:36

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

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

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

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