cookie 和 session的 区别总结
Cookies是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一个服务器
cookie的内容主要包括:
名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
cookie作用时间:
不设置过期时间,则表示这个cookie的生命期为浏览器会话期,关闭浏览器cookie就消失。这种cookie被称为会话cookie。
会话cookie一般不存储在硬盘上而是保存在内存里(这种一般不实用),若设置了过期时间,浏览器就会把cookie保存到硬盘上,
关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享。
而session机制采用的是一种在服务器端保持状态的方式。
由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。
而session提供了方便管理全局变量的方式,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量(如某些系统登录后会生成一个JSESSIONID来标识)。
这个值是通过用户的浏览器在访问的时候返回给服务器的,当在浏览器内禁用cookie时,这个值也可能设置为由get来返回给服务器。
--------------------------------------------------------------------------------------
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
定义:
当程序需要为某个请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(如:session id),
如果已包含则说明已经创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,会新建一个),
如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,
session id是一个不重复且不易被仿造的字符串类型的值,
这个session id将在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识返回给服务器。
一般这个cookie的名字都是类似于JSESSIONID这种。
cookie可以被操作禁止使用,有什么方法让cookie被禁止时仍然能够把session id传递回服务器?
即:
1、URL重写,就是把session id直接附加在URL路径的后面。
2、表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
cookie和session的主要区别:------------------------------------------------------------------------
1 .存取方式的不同
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,
运用Cookie是比较难的。而Session中能够存取任何类型的数据,包含有String、Integer、List、Map等。Session中也能够直接保管Java Bean和其他的Java类,
对象等,可以把Session看做是一个Java容器类。
2 .隐私策略的不同
Cookie存储在客户端,客户端的一些程序可能会窥探、复制及修正Cookie中的内容。而Session存储在服务器上,不存在敏感信息泄露的风险。假如选用Cookie,
比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密。
假如选择Session,大部分隐私都能够有效的保护。
3.有效期上的不同
运用Cookie会是比较好的选择。只需要设置Cookie的过期时间属性为一个很大的数字就可以了。
由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只要关闭了该Session就会失效,因而Session不会存在一直生效的情况。
运用URL地址重写也不能完成。而且假如设置Session的超时时间过长,服务器累计的Session就会越多,甚至会导致错误:内存溢出。
4.服务器压力的不同
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。
而Cookie保管在客户端,不占用服务器资源。因此并发的用户十分多,Cookie是很好的选择。
5 .浏览器支持的不同
Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。关于WAP上的应用,常规的Cookie就派不上用场了。
假如客户端浏览器不支持Cookie,需要运用Session以及URL重写。Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。
关于WAP应用来说,Session+URL地址重写是必须的选择。假如客户端支持Cookie,则Cookie既能够设为本浏览器窗口以及子窗口内有效(把过期时间设为–1),
也能够设为所有窗口内有效(把过期时间设为某个大于0的整数)。
但Session只能在本阅读器窗口以及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用两个不同的Session。(IE8下不同窗口Session相干)
6.跨域支持上的不同
Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。
跨域名Cookie如今被普遍用在网络中,
例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
仅运用Cookie或者仅运用Session可能完成不了理想的效果。这时应该尝试一下同时运用Cookie与Session。
Cookie与Session的搭配运用在实践项目中会完成很多意想不到的效果。