Cookie
1.状态管理
状态管理是你对同一个或不同页的多个请求维护状态和页信息的过程
状态管理的作用:
指示用户信息,关联浏览器实例
使得页与页之间,请求与请求之间能够共享信息
更为快速的数据存储与读取
2.Cookie
A.Cookie概述:
Cookie为Web应用程序保存用户相关信息提供了一种有用的方法
Cookie是小段保存在客户端的数据,用户访问网站时,网站会给用户一个包含过期时间的Cookie,浏览器收到Cookie后就存放在客户端的文件夹下,以 后用户每次访问网站页面的时候,浏览器会根据网站的URL在本地Cookie文件夹中查找是否存在当前网站关联的Cookie,如果有的话就连同页面请求一 起发送到服务器
注意:Cookie只是一段字符串,并不能执行
除了Cookie外,几乎没有其他的方法在客户端的机器上写入数据
现在的大多数网站都利用Cookie来保存一些数据(比如你的ID),以便下一次访问网站时能直接“继续”以前的配置,所有不要轻易关闭Cookie
不要在Cookie中保存保密信息,如用户名、密码、信用号等,在Cookie中不要保存不应该右用户掌握的内容,也不要保存可能被其他窃取Cookie 的人控制的内容
B.Cookie的使用
**保存Cookie:
保存单值Cookie:
HttpCookie SingelValueCookie=new HttpCookie("test1","单值Cookie");
SingleValueCookie.Expires=DateTime.Now.AddDays(1);
Response.Cookies.Add(SingleValueCookie);
等价于:
HttpCookie SingleValueCookie=new HttpCookie("test1");
SingleValueCookie.Value="单值Cookie";
SingleValueCookie.Expires=DateTime.Now.AddDays(1);
Response.Cookies.Add(SingleValueCookie);
保存多值Cookie:
HttpCookie MultiValueCookie=new HttpCookie("test2");
MultiValueCookie.Values.Add("key1","value1");
MultiValueCookie.Values.Add("key2","value2");
MultiValueCookie.Expiress=DateTime.Now.AddDays(1);
Response.Cookies.Add(MultiValueCookie);
等价于:
HttpCookie MultiValueCookie=new HttpCookie("test2");
MultiValueCookie.Values["key1"]="value1";
MultiValueCookie.Values["key2"]="value2";
MultiValueCookie.Expires=DateTime.Now.AddDays(1);
Response.Cookies.Add(MultiValueCookie);
通过以上代码,我们可以了解到Cookie可以保存单个值也可以保存多个值,其中,HttpCookie类型表示一个Cookie,Expiers属性用于修改Cookie的 过期时间,在添加完值以后,务必记得使用Response对象把Cookie对象返回给浏览器,我们的服务器不能直接在客户端机器上写Cookie,而是由浏览 器完成这一工作
**读取Cookie:
读取单值Cookie:
HttpCookie SingleValueCookie=Request.Cookies["test1"];
string CookieValue= SingleValueCookie.Value;
string CookieExpires=SingleValueCookie.Expires.ToString();
读取多值Cookie:
HttpCookie MultiValueCookie=Request.Cookies["test2"];
MultiValue.value==>结果为:key1=value1&key2=value2;
foreach(string subkey in MultiValueCookie.Values.AllKeys)
{
string value1=MultiValueCookie.Values["subkey"];
string Expires=MultiValueCookie.Expires;
}
通过代码可以知道:获取单值Cookie时只需要知道该Cookie保存时的名称,获取多值Cookie时也是根据保存名称获取,我们可以通过遍历 AllKeys属性返回的字符串数组获取所有子键Key,从而获得子键的值,另外,所有的Cookie的过期时间都不能正常显示,如果直接读取多值 Cookie的Value,它会把所有子键和子键值使用key=value方法显示,多个子键使用“&”连接
**删除Cookie:
删除单个Cokie:
HttpCookie SingleValueCookie=Request.Cookies["test1"];
SingleValueCookie.Expires=DateTime.MinValue;
Response.Cookies.Add(SingleValueCookie);
删除所有Cookie:
foreach(string key in Request.Cookies.AllKeys)
{
HttpCookie cookie=Request.Cookies[key];
cookie.Expires=DateTime.MinValue;
Response.Cookies.Add(cookie);
}
我们始终要记住,服务器不能直接删除Cookie,删除Cookie的操作是浏览器进行的,说是删除,其实是把它的过期时间设置为过去的时间,让Cookie过期
**修改Cookie:
HttpCookie SingleValueCookie=Request.Cookies["test1"];
SingleValueCookie.Value="修改后的单值Cookie";
Response.Cookies.Add(SingleValueCookie);
C.总结:
存储的物理位置:客户端的Cookies文件夹内
存储的类型限制:字符串
状态使用的范围:当前请求上下文的上下文都能访问到Cookie,Cookie对每个用户来说都是独立的
存储的大小限制:每个Cookie不超过4K数据,每个网站不超过20个Cookie,所有网站的Cookie总和不超过300个
生命周期:每个Cookie都有自己的过期时间,超过了过期时间后失效
安全与性能:存储在客户端,安全性差,对于敏感数据建议加密后存储
优点缺点与注意事项:可以方便地关联网站和用户,长久保存用户设置