一,寫一個類來實現
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; /// <summary> ///FormsCookieNameTest 的摘要說明 /// </summary> public class FormsCookieNameTest { /// <summary> /// FormsAuthenticationTicket /// </summary> /// <param name="uname"></param> public bool Login(string name) { if (!string.IsNullOrEmpty(name)) { //FormsAuthentication.SetAuthCookie(uname,true); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1, name, DateTime.Now, DateTime.Now.AddMinutes(20), true, "456", "/" ); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); cookie.HttpOnly = true; HttpContext.Current.Response.Cookies.Add(cookie); return true; } return false; } }
二,C#中的FormsAuthenticationTicket解析
// // 摘要: // 使用 cookie 名、版本、目錄路徑、發布日期、過期日期、持久性以及用戶定義的數據初始化 System.Web.Security.FormsAuthenticationTicket // 類的新實例。 // // 參數: // version: // 票證的版本號。 // // name: // 與票證關聯的用戶名。 // // issueDate: // 票證發出時的本地日期和時間。 // // expiration: // 票證過期時的本地日期和時間。 // // isPersistent: // 如果票證將存儲在持久性 Cookie 中(跨瀏覽器會話保存),則為 true;否則為 false。如果該票證存儲在 URL 中,將忽略此值。 // // userData: // 存儲在票證中的用戶特定的數據。 // // cookiePath: // 票證存儲在 Cookie 中時的路徑。 [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePusing System;
三,一個登陸保存cookie和刪除cookie
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; public partial class FormsCookieName : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { FormsCookieNameTest t= new FormsCookieNameTest(); if (t.Login(TextBox1.Text)) { Response.Redirect("~/FormsCookieName1.aspx"); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; public partial class FormsCookieName1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { //當在頁面FormsCookieName2刪除cookie,則這里則為空,就是退出登錄時 var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie != null) { var ticket = FormsAuthentication.Decrypt(cookie.Value); string role = ticket.UserData; TextBox1.Text = ticket.Name; } else { TextBox3.Text = "cookie刪除成功"; } } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("~/FormsCookieName2.aspx"); } }
protected void Page_Load(object sender, EventArgs e) { //刪除 Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddMinutes(-1); CookieExtensions.DeleteCookie(FormsAuthentication.FormsCookieName); } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("~/FormsCookieName1.aspx"); }
這兩個頁面要注意的是:獲取ticket.Name寫在和你生成cookie的同一個頁面的時候,會出現你獲取的ticket.Name的值為上一個cookie的ticket.Name的值。