[ASP.NET] 寫入 Authentication Cookie 的 FormsAuthenticationTicket.UserData
使用 FormsAuthenticationTicket.UserData 卡關,筆記一下…
當我們需要把特定的資料丟到 Cookie,可以利用 FormsAuthenticationTicket 來存放,不過,它會用到 web.config 的 machineKey ,FormsAuthentication 的加解密會需要用到 machineKey ,請參考:
http://support.microsoft.com/kb/910443/zh-tw
倘若你需要用到跨子網域,可以將每一個應用程式的 machineKey 弄成一樣,請參考:
http://www.codeproject.com/Articles/27576/Single-Sign-on-in-ASP-NET-and-Other-Platforms
我們可以自己創立 FormsAuthenticationTicket,然後寫入 Authentication Cookie
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(20),
false,
userData,
FormsAuthentication.FormsCookiePath);
var encryptTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptTicket);
cookie.HttpOnly = true;
this.Response.AppendCookie(cookie);
或者是將 Authentication Cookie 拿出來處理再塞回去
FormsAuthentication.SetAuthCookie(userName, false);
HttpCookie cookie = this.Request.Cookies[FormsAuthentication.FormsCookieName];
//get authen coolie
FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
oldTicket.Version + 1,
oldTicket.Name,
oldTicket.IssueDate,
oldTicket.Expiration,
oldTicket.IsPersistent,
userData,
FormsAuthentication.FormsCookiePath);
var encryptTicket = FormsAuthentication.Encrypt(newTicket);
cookie.Value = encryptTicket;
cookie.Expires = DateTime.Now.AddDays(1);
this.Response.AppendCookie(cookie);
Note:
取出 Authentication Cookie 的方法 FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
取出 FormsAuthenticationTicket 的方法 FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
內容出自:http://www.dotblogs.com.tw/yc421206/archive/2013/12/13/133999.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET