Cookie与Session的区别

来源:互联网 发布:18*进入编程 编辑:程序博客网 时间:2024/06/08 05:09

二者的定义:
当你在浏览网站的时候,web服务器会先送一小段资料放在你的计算机上,Cookie
会帮你在网站上所打的字或是一些选择都记录下来,当你下次再光临一个网站,web
服务器会看看有没有上次留下的Cookie资料,有的话,就会根据Cookie里边的内容
来判断使用者,以送出特定的网页内容给你。Cookie的使用很普遍,许多人性化服务的
网站,都是利用Cookie来辨别使用者,以方便送出使用者量身制作的内容。

具体来说Cookie机制采用的是在服务器端保持状态的方案,
Cookie的作用是为了解决HTTP协议无状态的缺陷所做的努力,
而Session机制采用的是在服务器端保持状态的方案。

同时我们也可以看到,在服务器保持状态的方案在客户端也需要保存一个标识,
所以session机制可能需要借助于Cookie机制来保存标识的目的,但是实际上
它还可以有其它选择。

Cookie机制。
正统的Cookie分发是通过扩展HTTP协议来实现的,服务器通过在
HTTP响应头部中加上一行特殊的指示以提示浏览器按照指示生成相应的Cookie。
然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而Cookie
的使用是由浏览器按照一定的规则,在后台自动发送给服务器的,如果某个Cookie
声明的作用范围大于等于请求资源的所在的位置,则把该Cookie附在请求资源的
HTTP请求头上发送给服务器。

Cookie的内容主要包括:名字,值,过期时间,路径,域。若不设置过期时间,
则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie就失效,
这种生命期为浏览器会话期的Cookie被称为会话Cookie。

会话Cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
若设置了过期时间,浏览器就会把Cookie保存在硬盘上,关闭后再次打开浏览器,
这些Cookie仍然有效直到设定的过期时间。存储在硬盘的Cookie可以在不同的浏览器
进程间共享,比如两个IE窗口,而对于保存在内存里的Cookie,不同的浏览器有不同的
处理方式。

Session机制
Session机制是一种服务器的机制,服务器使用一种类似于散列表的结构,来保存信息。

当程序为某个客户端的请求创建了一个Session时,服务器首先检查这个客户端的请求里
是否已经包含了一个Session标识(称为Session id),如果已包含说明以前已经为此客户端
创建过Session,则就按照Session id把这个session检索出来使用(如果检索不到,会新建一个)
如果客户端请求不包含 Session Id,则为此客户端创建一个Session并且生成一个与此Session
相关联的Session id,Session id 的值是一个既不会重复,又不容易找到规律仿造的字符串。

这个Session id 将会在本次响应中返回给客户端保存,保存这个Session id的方式可以用
Cookie,这样在交互的过程中,浏览器可以自动的按照某种规则,把这个标识符,发送给服务器
一般这个Cookie的名字都是类似于Sessionid。但是Cookie 可以被人为的禁止,则必须有
其它机制以便在Cookie被禁止时,仍然能够把Session id传递回服务器。

经常被用到的一种技术叫做URL重写,把Session id直接附在URL路径的后面,
还有一种技术叫做表单隐藏字段。就是服务器会自动的修改表单,添加一个
隐藏字段,以便在表单提交时能够把Session id传递回服务器。

Cookie和Session的区别:
1.存取方式的不同
Cookie中只能保管ASCII字符串,如果需要存取Unicode字符或者二进制
数据,需要先进行编码,Cookie中也不能存取Java对象。

而Session中可以存取任何类型的数据。

2.隐私策略的不同
Cookie存储在客户阅读器中,对客户端是可见的,客户端的一些程序可能会
窥探,而Session存储在服务器上,对客户端是透明的,不存在安全问题。

3.有效期的不同。
Cookie可以存取任意长时间,只需把Cookie的过期时间设置为一个很大的数字就行。
而Session不能长时间存储。因为容易导致内存溢出。

4.服务器的压力不同。
Session是保存在服务端的,每个用户都会产生一个Session。假如
保存的特别多,会产生十分多的Session。耗费大量的内存。

而Cookie保存在客户端,不占用服务器资源,假如并发阅读的用户十分多
Cookie是很好的选择。

5.浏览器支持的不同
Cookie是需要浏览器支持的,假如客户端禁用了Cookie,或者不支持
Cookie,则会话跟踪会失败。

6.跨域支持不同
Cookie支持跨域名访问,例例如将domain属性设置为
“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够
访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、
Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

所以个人建议 :
将登陆信息等重要信息放在Session之中。
其它信息如果还需要保留,可以放在Cookie之中。

原创粉丝点击