ASP.NET/Cookie
< ASP.NET
Cookie 是一小段文本信息,隨HTTP請求一起被傳遞的額外數據。只能保存明文字符串。大多數瀏覽器支持最大為 4096 字節的 Cooki,只允許每個站點存儲 20 個 Cookie,來自所有站點的 Cookie 總數作出絕對限制,通常為 300 個。
Cookie對象
編輯ASP.NET中,Cookie對象是HttpCookieCollection類的一個實例。
public sealed class HttpCookie
{
public string Domain { get; set; }// 获取或设置将此 Cookie 与其关联的域。默认值为当前域。
public DateTime Expires { get; set; }// 获取或设置此 Cookie 的过期日期和时间(在客户端)。
public bool HasKeys { get; }// 获取一个值,通过该值指示 Cookie 是否具有子键。
public bool HttpOnly { get; set; }// 获取或设置一个值,该值指定 Cookie 是否可通过客户端脚本访问。如果 Cookie 具有 HttpOnly 属性且不能通过客户端脚本访问,则为 true;否则为 false。默认为 false。
public string Name { get; set; } // 获取或设置 Cookie 的名称。
public string Path { get; set; } // 获取或设置要与当前 Cookie 一起传输的虚拟路径。默认值为当前请求的路径。
public bool Secure { get; set; }// 获取或设置一个值,该值指示是否使用安全套接字层 (SSL)(即仅通过 HTTPS)传输 Cookie。
public string Value { get; set; }// 获取或设置单个 Cookie 值。默认值为空引用。
public NameValueCollection Values { get; }// 获取单个 Cookie 对象所包含的键值对的集合。
public string this[string key] { get; set; }// 获取 System.Web.HttpCookie.Values 属性的快捷方式。
}
Cookie使用
編輯Cookie寫入瀏覽器的過程:
Response.Cookies["MyCookieName"]="string value";
//或者:
HttpCookie cookie = new HttpCookie("MyCookieName", "string value");
Response.Cookies.Add(cookie);
實際是通過HTTP的Set-Cookie響應頭途徑發送到客戶端。
讀取Cookie:
HttpCookie cookie = Request.Cookies["MyCookieName"];
if( cookie != null )
labCookie1.Text = cookie.Value;
else
labCookie1.Text = "未定义";
瀏覽器檢查當前要請求的域名以及目錄, 這二項目與Cookie的Domain和Path匹配,會被發送到伺服器端。對於Domain則是按照尾部匹配的原則進行的。
刪除Cookie:
HttpCookie cookie = new HttpCookie("MyCookieName", null);
cookie.Expires = new DateTime(1900, 1, 1);
Response.Cookies.Add(cookie);
就是寫Cookie時設置Expires為一個早於現在的時間。瀏覽器接收到這個Cookie時,便會刪除它。
如果把對象作為cookie傳輸,建議將對象JSON序列化為字符串。例如:
private void WriteCookie_2b()
{
MyDisplaySettings setting = new MyDisplaySettings { Style = 2, Size = 48 };
HttpCookie cookie = new HttpCookie("MyDisplaySettings2", setting.ToJson());
Response.Cookies.Add(cookie);
}
private void ReadCookie_2b()
{
HttpCookie cookie = Request.Cookies["MyDisplaySettings2"];
if( cookie == null )
labDisplaySettings2.Text = "未定义";
else {
DisplaySettings setting = cookie.Value.FromJson<MyDisplaySettings>();
labDisplaySettings2.Text = setting.ToString();
}
}