创建一个Cookie并将其写回到客户端
HttpCookie testCookie=new HttpCookie("firstCookie");//创建一个名为firstCookie的Cookie对象。
// HttpCookie testCookie=new HttpCookie("firstCookie","value1");//创建一个名为firstCookie的对象并且其只有一个值是"value"
testCookie.Expires=DateTime.Now.AddDays(1);//设置Cookie的过期时间
Response.Cookie.Add(testCookie);//将该Cookie输出到浏览器
/*下面的是创建多值的Cookie*/
HttpCookie MultiValueCookie = new HttpCookie("cookieTest2");
MultiValueCookie.Values.Add("key1","value2");
MultiValueCookie.Values.Add("key2","value3");
MultiValueCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(MultiValueCookie);
在服务器端读取Cookie
HttpCookie SingleValuesCookie=Request.Cookies["cookieTest1"];
Response.Write(SingleValuesCookie.Value);//输出Cookie的值
Response.Write(SingleValuesCookie.Expires);//输出Cookie的过期时间
- 我们发现,所有Cookie的过期时间都不能正常显示。这是因为浏览器返回给服务器的Cookie是不包含过期时间的,而服务器返回给浏览器的Cookie是包含过期时间的。过期时间只对客户端浏览器有意义,对服务器来说没有什么意义。(在此产生一个疑问就是怎么在服务器端判断获取的Cookie已经过期)
删除Cookie
下面是删除Cookie的操作。
protected void btn_DelCookie_Click(object sender, EventArgs e)
{
HttpCookie SingleValueCookie = Request.Cookies["test1"];
SingleValueCookie.Expires = DateTime.MinValue;
Response.Cookies.Add(SingleValueCookie);
}
如果你想删除所有Cookie,可以遍历删除。
protected void btn_DelCookie_Click(object sender, EventArgs e)
{
foreach (string key in Request.Cookies.AllKeys)
{
HttpCookie cookie = Request.Cookies[key];
cookie.Expires = DateTime.MinValue;
Response.Cookies.Add(cookie);
}
}
我们始终要记住,服务器不能直接删除Cookie,删除Cookie的操作是浏览器进行的。说是删除,其实是把它的过期时间设置为过去的时间,让Cookie过期。因此,对于删除操作来说有三个步骤。
1.从Request对象中获取Cookie。
2.把Cookie的过期时间设置为过去的时间。
3.把Cookie重新写回Response中。
4.修改Cookie的操作也非常简单。
protected void btn_ModifyCookie_Click(object sender, EventArgs e)
{
HttpCookie SingleValueCookie = Request.Cookies["test1"];
SingleValueCookie.Value = "修改后的单值Cookie";
Response.Cookies.Add(SingleValueCookie);
}
Cookie总结
Cookie虽然是一个简单实用的对象,但是我们也要注意Cookie的工作原理、大小限制以及安全性等,大致可以归纳为以下几点。
- 存储的物理位置。客户端的Cookies文件夹内。
- 存储的类型限制。字符串。
- 状态使用的范围。当前请求上下文的上下文都能访问到Cookie,Cookie对每个用户来说都是独立的。
- 存储的大小限制。每个Cookie不超过4K数据。每个网站不超过20个Cookie。所有网站的Cookie总和不超过300个。
- 生命周期。每个Cookie都有自己的过期时间,超过了过期时间后失效。
- 安全与性能。存储在客户端,安全性差。对于敏感数据建议加密后存储。
- 优点缺点与注意事项。可以很方便地关联网站和用户,长久保存用户设置。