FormsCookieName保存登錄用戶名的使用


 

一,寫一個類來實現

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的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM