Session与Cookie的区别

来源:互联网 发布:农村淘宝代收点 编辑:程序博客网 时间:2024/06/18 00:17

这个是面试时经常问及的知识点,作为Java Web开发人员,这两个概念需要特别清楚

1. 保存地址

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

简言之:session是保存在服务端的内存里面;cookie保存于浏览器或客户端文件里面。

2. 安全性

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;

3. 性能影响

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie;

4. 文件大小

单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能超过3K;

基础概念

为什么引入cookie:Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,引入Cookie机制,弥补HTTP协议无状态的不足。
这里写图片描述

cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态。服务器还可以根据需要修改cookie的内容。

记录用户访问次数:java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie类对象对客户端Cookie进行操作。通过request.getCookie()获取客户端提交的所有Cookie

Cookie的不可跨域名:很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。Cookie在客户端是由浏览器来管理的,浏览器根据域名判断一个网站是否能操作另一个网站Cookie。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。

案例:登录信息如账号、密码等保存在Cookie中,并控制Cookie的有效期,下次访问时再验证Cookie中的登录信息即可。

Session

Session技术则是服务端的解决方案,它是通过服务器来保持状态的。在服务器端程序运行的过程中创建Session。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

Session有效期:为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。可通过setMaxInactiveInterval(longinterval)修改,也可以在web.xml中修改。另外,通过调用Session的invalidate()方法可以使Session失效。

more contents

更详细介绍请参考:
http://my.oschina.net/xianggao/blog/395675

0 0