[轉貼] 關於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);
}
留言
張貼留言