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();
}
}