2011-04-26 116 views

回答

1

使用FormsAuthentication.GetAuthCookie

HttpCookie httpCookie = FormsAuthentication.GetAuthCookie(_username, true); 
httpCookie["ID"] = userID.ToString(); 
+0

這是如何回答這個問題的?他問如何將它保存爲表單認證票證的一部分,而不是將其退回。 – RPM1984 2011-04-26 09:31:11

+0

他提到「手動登錄」。我想這意味着他對自己想要的東西是有抵觸的。如果有的話,請提供其他解決方案。如果我有自己的其他解決方案,我也會提供。 – 2011-04-26 09:38:15

+0

@ Akram-答案補充 – RPM1984 2011-04-26 23:32:04

0

用戶名並不一定意味着用戶的登錄名或真實的人的名字。它基本上意味着任何可以識別用戶的字符串 - 通常,登錄名將用於表單身份驗證(因爲登錄將是唯一的),但您可以改爲使用用戶ID(或組合登錄&用戶ID,例如「2 |千斤頂「) - 只要記住用作」用戶名「的任何值,用戶的身份(HttpContext.User.Identity.Name)也可以使用。

1

FormsAuthenticationTicket有一個超載需要string userData。除了默認的HttpContext.User.Identity(通常是電子郵件地址,例如使用SetAuthCookie登錄的內容)之外,您還可以在其中添加附加數據到需要保存的加密cookie中。

所以,你可以這樣做:

var user = new User { UserId = 1, Nickname = "Foo" }; 

    var encodedTicket = FormsAuthentication.Encrypt(
     new FormsAuthenticationTicket(
      1, 
      user.Nickname, 
      DateTime.Now, 
      DateTime.UtcNow.Add(FormsAuthentication.Timeout), 
      true,                    
      user.ToString())); 

var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encodedTicket); 
httpResponseBase.Cookies.Add(httpCookie); 

你可以ovveride您User對象的ToString()方法,保留該信息(作爲分隔字符串,例如)。

然後,當您解密cookie時,將字符串拆分並將每個請求所需的信息撤回。

+1

謝謝。人們不經常閱讀評論。這是使他們能夠看到您的觀點並從中受益的更好方法。 – 2011-04-27 05:59:54