一、Cookie
1、概念
存在于客户端,cookie就是服务器在你的电脑上保存了一些数据,并且是文本文件。当你下一次访问同一个服务器的时候,这个服务器会将一些键值对返回给客户端浏览器,从你的cookie资料里读出它上次保存的文本内容,进行判断,如果符合条件,就会给你相应的内容。
2、作用
在一个很短的时间内,如果与用户相关的数据被频繁访问,可以针对这个数据做缓存,这样可以大大提高数据的访问性能。
由于是同一个客户端发出的请求,每次发出的请求都会带有第一次访问时服务端设置的信息,这样服务端就可以根据 Cookie 值来划分访问的用户了。
3、创建
HttpCookiecookie=new HttpCookie["key"];
cookie.Value="good";
Response.AppendCookie(cookie); //写到本地浏览器
cookie.Values.Add("Dwyane","good");
cookie.Values.Add("kaoya","haochi");
cookie.Values.Add("Pijiu","haohe");
Response.AppendCookie(cookie);
4、使用
HttpCookiecookie=Request.Cookies["aspcn"];
value1=cookies.Values["webmaster"];
value2=cookies.Values["writer"];
HttpCookiecookie=Request.Cookies["strKey"];
if(null==cookie)
{
//cookie不存在
}
二、Session
1、概念
存在于服务器端,Cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie 很多,这无形地增加了客户端与服务端的数据传输量,而Session 的出现正是为了解决这个问题。
同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie 值,而是只要传回一个 ID,这个 ID 是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个 ID 就行了,这个 ID 通常是 NANE 为 JSESIONID 的一个 Cookie。
2、如何工作
有了 Session ID 服务端就可以创建HttpSession 对象了,第一次触发通过 request.getSession() 方法。如果当前的 Session ID 还没有对应的HttpSession 对象,那么就创建一个新的,并将这个对象加到 org.apache.catalina. Manager 的 sessions容器中保存。Manager 类将管理所有 Session 的生命周期,Session 过期将被回收,服务器关闭,Session 将被序列化到磁盘等。只要这个HttpSession 对象存在,用户就可以根据 Session ID 来获取这个对象,也就达到了状态的保持。
3、创建
Session["变量名"]=值;
Session.Add("变量名",值);
如:Session["username"]="zs";等同于Session.Add("username","zs");
4、使用
Session["变量名"]就可以了
Session["username"]这就代表"zs"这个字符串
5、移出
Session.RemoveAll()或者 Session.Clear()
一般情况下Session的有效时间为20分钟
Session.Timeout=…;
常应用的场景:登录
三、安全性
虽然 Cookie 和 Session都可以跟踪客户端的访问记录,但是它们的工作方式显然是不同的,Cookie 通过把所有要保存的数据通过 HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储在客户端的浏览器里,所以这些 Cookie 数据可以被访问到。
就像我们前面通过 Firefox 的插件HttpFox 可以看到所有的 Cookie 值。不仅可以查看 Cookie,甚至可以通过 Firecookie 插件添加、修改 Cookie,所以Cookie 的安全性受到了很大的挑战。
相比较而言 Session 的安全性要高很多,因为Session 是将数据保存在服务端,只是通过 Cookie 传递一个 SessionID 而已,所以 Session 更适合存储用户隐私和重要的数据。
总结
关于cookie和session还有很多需要我去学习,这些只是对它们的简单理解。。