1. 程式人生 > >ASP.NET 使用cookie完成自動登入

ASP.NET 使用cookie完成自動登入

1.簡單理解
cookie是儲存在客戶端的使用者資訊,在瀏覽器首次訪問伺服器時由伺服器建立併發給客戶端。瀏覽器收到cookie後會根據cookie時效,選擇將cookie內容儲存在記憶體或硬碟。當瀏覽器再次訪問伺服器時會在請求中攜帶cookie。

目的:追蹤使用者會話,標識使用者,讓伺服器知道是誰在訪問網站。


2.使用

有很多web程式中第一次登入後,在一定時間內再次訪問同一web程式時就無需點選登陸按鈕,而是直接進入程式的主介面(僅限於本機)。實現這個功能的關鍵就是服務端要識別客戶的身份。而用cookie是最簡單的驗證方式。


3.舉例
使用者在第一次點選登入的時候,可以將使用者名稱和密碼作為cookie寫到本地,程式碼如下:

protected void Button1_Click(object sender, EventArgs e)
{
    string username = this.txtUserName.Text;//使用者名稱
    string password = this.txtPassword.Text;//密碼

    if (UserManager.LoginValidate(username, password) && this.ckState.Checked == true)//判斷登入名和密碼是否正確和是否選擇了記住使用者名稱和密碼的複選框
    {
        //判斷客戶端瀏覽器是否存在該Cookie 存在就先清除

        if (Request.Cookies["username"] != null && Request.Cookies["password"] != null)
        {
            Response.Cookies["userName"].Expires=System.DateTime.Now.AddSeconds(-1);
            //Expires過期時間
            Response.Cookies["password"].Expires =System.DateTime.Now.AddSeconds(-1);
        }
        else
        {
              //向客戶端瀏覽器加入Cookie (使用者名稱和密碼 最好是使用MD5加密)
              HttpCookie hcUserName1 = new HttpCookie("username");
              hcUserName1.Expires = System.DateTime.Now.AddDays(7);
              hcUserName1.Value = username;
              HttpCookie hcPassword1 = new HttpCookie("password");
              hcPassword1.Expires = System.DateTime.Now.AddDays(7);
              hcPassword1.Value = password;
              Response.Cookies.Add(hcUserName1);
              Response.Cookies.Add(hcPassword1);
         }
    }
}


第一次點選登入之後,就存在了cookie,那麼再次登入的時候就會去對cookie的資訊進行驗證,驗證程式碼如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Cookies["username"] != null && Request.Cookies["password"] != null)
    {
    //使用者曾登入 
    username = Request.Cookies["username"].Value.ToString();  //讀取Cookie 
    password = Request.Cookies["password"].Value.ToString();//判斷Cookie讀取出來的使用者名稱和密碼是否能正確登入
    //進行用cookie的資料進行自動登入操作
    if (UserManager.LoginValidate(username, password))
    {
    
        //登入的一些程式碼,比如到那個窗體之類的,還可以做一些
    
    }
}

如果點選退出之後,那麼cookie中的資訊就會清空,等待下一次點選自動登入。

//退出
protected void Button2_Click(object sender, EventArgs e)
{
    HttpCookie hcUserName1 = new HttpCookie("username");
    hcUserName1.Expires = System.DateTime.Now.AddDays(-7);
    hcUserName1.Value = username;
    HttpCookie hcPassword1 = new HttpCookie("password");
    hcPassword1.Expires = System.DateTime.Now.AddDays(-7);
    hcPassword1.Value = password;
    Response.Cookies.Add(hcUserName1);
    Response.Cookies.Add(hcPassword1);
}


4.Dammmmmmmn