cookie
cookie技术是客户端的一种解决方案,是又服务器发送给客户端的一种特殊信息,以文本文件的方式保存在客户端,然后客户端每次向服务器发送请求的时候都会带上这些信息(联想到登录时候的记住密码的功能)。记录客户端的状态,保存在客户端的浏览器中。
当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息这些信息存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置;客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器,这时,Cookie信息是存放在HTTP请求头(Request Header)。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。
由于HTTP是一种无状态的协议,服务器并不能知道客户的身份,而cookie,在此时就发挥作用,充当身份证,可以对应一个客户,使得服务器可以确定客户的身份,cookie弥补http无状态的这种不足。
需要注意的是,cookie是不可以跨域名的,在一个浏览器的一个网址上的cookie并不适用于其他浏览器,也不适用于统一浏览器的其他网址。而且,cookie中的中文必须编码(通常是不使用gbk,因为有的不支持)。通过在地址栏输入javascript:alert(document.cookie)
Session
Session是服务器端使用的一种记录客户端状态的机制,保存在服务器端。在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建Session。
Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。
Session的正常运行需要客户端浏览器的支持。因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
Cookie与Session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会影响服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;