Cookie和Session的区别与联系

 

 

为什么会有Cookie和Session的出现

当我们在访问浏览器client时,服务器server不会为客户端client保存它上一次访问的内容,每一次访问都是独立的。为了方便用户的访问,免使用户的重复填写一些信息(例如:用户登录信息,购物车,个性化推荐),所以就出现了这两个机制,使访问服务器server时可以保存以前访问的内容。

Cookie & Session

Cookie:一般是由服务器server在http响应头上加特殊的指令来使客户端client在本地生成cookie文件。当客户端再次访问上次相同的页面时,客户端会检查所有cookie文件,然后找到与这个页面相对应的cookie文件,把它添加到http请求头上,发送给服务器。

Cookie主要包括:

值,名字,路径,域,过期日期,安全。

path:指定与Cookie相关联的页面。

domain:指定相关联的服务器或域。

secure(安全):指定Cookie如何通过网络在用户和服务器之间传递。缺省为NULL,如果标记为secure,则使用的是https传递数据。

Session:使用散列表(哈希表)结构把数据保存在服务器端,客户端保留服务端生成的session id;当客户进行访问时,服务器首先在客户端的请求中检查是否已经有一个session id。如果存在则在服务器中把这个session检索出来,如果没有,则创建一个session 并生成相对应的session id,把这个session在响应时返回给客户端保存。

存储对比

Cookie:保存在客户端;每个cookie信息<=4KB;每个网站在本地只能保留20个cookie点;只能保存ASCII码字符串,并且需编码为unicode或者二进制;由于保存在本地硬盘所以对服务器压力小;

Session:保存在服务器;在存储空间上限,但由于服务器性能的问题,一般会设有删除机制;可以存储任何类型的数据结构:string,list,map..;由于保存在服务器端上所以对服务器压力大;

安全行对比

Cookie:没有安全性,如果被人截获,他只要把Cookie向服务器提交,那么就可以冒充别人访问服务器。

Session:安全性高,客户端保存session id的方式为cookie机制,但cookie可以被浏览器禁止。通过url重写或表单隐藏字段技术,把session id传递给服务器。

url重写或表单隐藏字段技术

url重写:将本地保存的session id,以请求体附在url中传递给服务器,而不需将session id写入到请求头中

表单字段隐藏:服务器提供给客户端的表单(input框)添加隐藏字段,客户端在提交时将session id传递给服务器。

跨域问题

cookie:支持跨域访问(可以跨父子域访问)。如果将cookie信息种在父域(*.baidu.com),子域可以使用(a.baidu.com)。子域的的cookie信息父域不能使用。

session:不支持跨域访问。session是保存在服务端的,所以当浏览器携带A服务器产生的session id去访问B服务器时,会出现访问不到session资源的问题。

注意

一般采用cookie和session结合使用的方式,重要信息采用session机制,一般信息采用cookie机制。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值