浏览器Cookies用于关联一些文本到网站的每一个用户。
使用浏览器cookie
当Web服务器端创建一个cookie时,一个附加的HTTP首部在浏览器显示页面时被发送到浏览器。HTTP首部类似如下形式:
Set-Cookie:message=Hello
Set-Cookie首部使得浏览器创建一个名为message的cookie包含值Hello。
在浏览器创建cookie以后,它从相同的应用程序请求页面时都将会把cookie的信息发送给Web服务器端。
一个cookie就是一段文本,cookie只用用于存储字符串值。
实际上,我们可以存储两种类型的cookie,一种是会话cookie,一种是持久化cookie。会话cookie只存储在内存中,关闭浏览器就消失了,持久化cookie则被保存到用户电脑上,可以持久化。注意,持久化cookie是对浏览器独立的,即不同浏览器创建的cookie保存的位置不同,也不能共享。
另外,cookie保存的信息都是以明文形式的,所以敏感信息不要保存到cookie上。
cookie的安全性限制
cookie对浏览器独立
cookie对域名独立
一个域名存储的cookie总大小不能超过4096byte。这个大小的限制,包含所有的cookie名称和值在内。大多数浏览器限制一个域名不超过20个cookie。
创建cookie
可以通过给Response.Cookies集合添加cookie来创建新的cookie。Response.Cookies集合包含所有Web服务器端发送到浏览器的cookie。
Response.Cookies["message"].Value = txtCookieValue.Text;
以上代码只创建一个会话cookie,关闭浏览器就会消失。如果需要创建持久化cookie,则需要为cookie指定一个过期时间。
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddYears(2);
读取cookie
Request.Cookies集合可以读取cookie。
if (Request.Cookies["message"] != null)
lblCookieValue.Text = Request.Cookies["message"].Value;
设置cookie属性
HttpCookie类代表cookie,当创建或读取一个cookie时,可以使用该类下面的这些属性:
Domain——设置关联cookie的域名;
Expires——通过给定一个过期时间来创建一个持久化cookie;
HasKeys——用于指定一个cookie是否是一个多值cookie;
HttpOnly——用于避免cookie被Javascript访问;
Name——cookie的名称;
Path——关联到cookie的路径,默认为/;
Value——读写cookie的值;
Secure——用于指定cookie需要通过安全Socket层连接传递;
Values——使用多值cookie时,用于读写特定的值。
删除cookie
设定cookie的Expires的值为过去时间即可。
使用多值cookie
因为对单个域名浏览器不能存储超过20个cookie,可以通过创建多值cookie来突破该限制。多值cookie是一个包含子键的单一cookie。可以根据需要创建任意数量的子键。
Response.Cookies["preferences"]["firstName"] = txtFirstName.Text;
Response.Cookies["preferences"]["lastName"] = txtLastName.Text;
Response.Cookies["preferences"]["favoriteColor"] = txtFavoriteColor.Text;
Response.Cookies["preferences"].Expires = DateTime.MaxValue;