在web应用编程中,session与cookie都是很重要的东西,最近通过搜索整理了一些相关资料,现在就简单说说两者之间的区别。
关于cookie:
cookie是在客户端保存一些信息。cookie的内容主要包括名字,值,过期时间,路径和域。路径和域一起构成cookie的作用范围。如果不设置过期时间,则表示这个cookie的生命期为浏览会话期间,关闭浏览窗口,cookie就消失。这种生命期为浏览会话期的cookie称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,但是这种行为并不是规范规定的。若设置了过期时间的话,浏览器就会把cookie保存在硬盘上,当你关闭浏览器再次打开时这些cookie依然有效直到超过设定的过期时间。
关于session:
session在web开发中是一个重要的概念,这个概念很抽象,很难定义,在这里我们来探讨http session.
在计算机中,尤其是在网络应用中,称为“会话控制”。session对象则是在服务器端存储特定用户会话所需的属性及配置信息。这样,当用户在浏览一个网站时在应用程序的web页之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。对于保存在内存里的cookie,不同的浏览器有不同的处理方式session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息,当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session id,如果包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用,如果检索不到就会为这个客户端创建一个session并且生成一个与此session相关联的session id,session id 的值应该是一个既不会重复又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识符发送给服务器。一般这个cookie的名字都是类似于session id。但cookie可以被人为的禁止,则必须有其它机制以便在cookie被禁止时依然能够把session id传递回服务器。
两者之间的区别:
1. cookie不是很安全,因为它对客户端是可见的,客户端的一些程序可能会窥探,复制以至修改cookie中的内容。而session是将内容存储在服务器上的。
2. session会在一定时间内保存在服务器上。当访问增多会比较占用服务器的性能,所以如果考虑到减轻服务器的压力,应当使用cookie。
3. cookie中只能保存ASCII字符串,如果需要存取unicode字符或者二进制数据的话就需要先进行编码。cookie中也不能直接直接存取java对象。而session中是能够存取任何类型的数据的,在session中也是能够直接保管java bean等类或对象的。
4. cookie是支持跨域名访问的将domain属性设置为“.aaaa.com”,则以“.aaaa.com”为后缀的一切域名均能够访问该Cookie。而session是不支持跨域名访问的,仅限在它自己所在的域名范围内。
5. 因为cookie是服务器端向客户端写入的小的片段信息。你可以在internet选项中找到存放cookie的文件夹。如果不删除,cookie就会一直在这个文件夹。