2009-07-19 92 views
42

我正在使用aspx和c#設置登錄的身份驗證Cookie。使用FormsAuthentication.SetAuthCookie存儲更多信息

FormsAuthentication.SetAuthCookie(UserName, True) 

我想在同一個cookie中存儲更多信息。我可以將值添加到此身份驗證cookie還是必須使用第二個http cookie?

基本上我尋找而去存儲用戶的Id,所以我可能可以使用用戶錶行鍵

感謝, 伊甸園

回答

47

您可以添加用戶數據到的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

1

通行證用戶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

15

只要對您有用,您可以在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

3

是的,它是明智的使用「|」把更多的信息。如果微軟有另一種重載方法

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

那麼我們的生活會容易得多,我們的代碼會更安全。

-1

您可以使用FormsAuthentication.Timeout.TotalMinutes根據web.config中的值設置超時。