cookie和session的区别详解

cookie 和 session的区别

1,使用cookie实现状态保持的原理:
当客户登录网站的时候,用户进行表单提交,浏览器向服务端发送post请求,服务器接收请求,处理参数,返回响应。
如果服务器发现请求报文中存在cookie信息,那么服务器会将这个cookie信息与服务器中已经存在的cookie信息进行对比,以获取用户状态。
如果服务器发现请求报文中不存在cookie,那么服务器会针对当前用户生成一个cookie,并附加在响应报文中发送给浏览器。
浏览器接收到cookie后,会将其存储在本地,下一次对这一网站请求时,会将cookie信息连同请求报文一起发送给服务器,
服务器接收到响应报文后,浏览器发送的cookie与服务器已经存储的cookie信息做对比,如果一样,服务器就可以获取客户当前的状态,实现状态保持。

cookie的特点:
cookie是明文的,一般是由名字,值,过期时间,路径和域构成的,存储在浏览器端,其存储方式有两种:
如果cookie的过期时间是当浏览器关闭cookie就失效(即会话cookie),浏览器就会将其存放在内存中,
如果过期时间不是会话cookie,浏览器会将其存放到硬盘上,直到cookie过了过期时间,会由浏览器或者第三方工具来删除cookie。
一般来说cookie的单个大小不超过4k,对于同一个网站而言,浏览器最多保存20个cookie,
由于非会话cookie会以文本文件的形式存放在硬盘上,因此cookie的不安全性就成为了cookie的最大缺点,可以通过分析或者伪造cookie的方式进行欺骗。

另外:
cookie除了可以由服务端创建外,也可以在客户端使用客户端脚本创建,此时服务器的响应报文中会附加一个特殊的字段,浏览器收到响应报文后,会根据这个特殊的字段生成服务器特定的cookie,并存储在本地,或者发送给服务器。

2,使用session进行状态保持的原理
当浏览器端向服务器段发送请求时,服务端会首先检查浏览器的请求中是否存在session_id信息,
如果存在,则通过session_id查找到session_data,进行使用或者状态更新,
如果不存在,则会创建一个session_id 和session_data,并将session_data存放在服务端,将session_id连同响应一并传回浏览器,
session_id一般是个不容易仿造,不容易找到规律,且唯一的随机字符串,
浏览器一般会把session_id存储在cookie中,因此,session是基于cookie存在的,但有时候在浏览器端有可能会人为的禁用cookie,
这时就需要使用其他手段使session_id顺利存储在浏览器端,这里一般使用两种方式:
1,url重写,就是把session_id放入url路径中,发送给客户端,
2,表单隐藏字段,就是在表单中,放置一个隐藏的字段,将session_id写入,发送给浏览器,
当浏览器又一次请求服务器时,就会携带session_id,服务器通过session_id查找到session_data,识别用户,这样就实现了状态保持。


session的特点:
session是加密的,是通过类似字典一样的键值对的方式进行存储的,
设置session时需要一个secret key,用来加密session,
session信息会存储在服务器端,session_id会以一个字符串的形式存储在浏览器端,
由于session信息会存储在服务器端,如果用户量比较大,会很大程度上增加服务器的压力,因此可以使用cookie来实现状态保持
一些用户量比较大的公司如facebook,都是使用cookie进行的状态保持。

猜你喜欢

转载自blog.csdn.net/James_Nan/article/details/84474250