[轉貼] 關於ASP.NET 和 C#中對Cookie的讀寫操作、跨域Cookies的刪除

 

           HttpCookie cookie = new HttpCookie("Info");    //定義cookie對象以及名為Info的項

            DateTime dt = DateTime.Now;                    //定義時間對象

            TimeSpan ts = new TimeSpan(1, 0, 0, 0);        //cookie有效作用時間,具體查msdn

            cookie.Expires = dt.Add(ts);                   //增加作用時間

            cookie.Values.Add("user", "coolong");          //增加屬性

            cookie.Values.Add("userid", "1203");

            Response.AppendCookie(cookie);                 //確定寫入cookie中


            if (Request.Cookies["Info"] != null)

            {

                //讀全部

                string temp = Convert.ToString(Request.Cookies["Info"].Value);

                //讀子項目

                //string temp = Convert.ToString(Request.Cookies["Info"].Values["user"]) + " " + Convert.ToString(Request.Cookies["Info"].Values["userid"]);


                if (temp == "")

                {

                    Response.Write("空值");

                }

                else

                    Response.Write(temp);

            }

            else

            {

                Response.Write("error");

            }


            //修改或清除 Cookies 內容

            cookie.Value = "";

            Response.SetCookie(cookie);


********************************************************************************************


跨域Cookies的刪除


若要清除跨 Domain 的 Cookie 必須清除兩次,例如說使用者在 www1.domain.com 要執行登出動作,必須要先將 Domain 為 www1.domain.com 的 Cookie 給清除掉,在接著將 Domain 為 .domain.com 的這個 Cookie 清除掉。


因為這兩個 Cookie 為「同名」,全部都叫做 account,所以無法在一個 HTTP Request 中清除掉兩個同名的 Cookie,所以必須要在不同的兩個 HTTP Request 中個別刪除不同 Domain 的 Cookie。


 示例代碼:

 

 HttpContext context = HttpContext.Current;

 

 HttpCookie c = context.Request.Cookies["account"];

 c.Expires = DateTime.Now.AddDays(-1);

 

 //先清除.domain.com的Cookie

 if (String.IsNullOrEmpty(context.Request["domain"]))

 {

     c.Domain = ".domain.com";

     context.Response.SetCookie(c);

     context.Response.Redirect("?domain=mine", true);

 }

  else

  {

      context.Response.SetCookie(c);

  }

留言

這個網誌中的熱門文章

TeknoParrot 模擬器介紹,俗稱《鸚鵡模擬器》

[轉貼] ASP.NET傳遞參數給Crystal Report做Export或Print的動作

Raspberry Pi 樹莓派 - Raspbian 忘記密碼簡單重設