一篇搞懂cookie和session

一篇搞懂cookie和session

一篇搞懂cookie和session

cookie、session和token存在的意义是什么?

http是无状态的,每次请求是独立的,服务端不保存会话信息,所以他的好处也就是快,但缺点也显而易见,就是无法对不同用户进行区分。

什么是cookie?

cookie存储于客户端,请求后由服务器发送回浏览器,下次访问同一服务器时,将cookie作为参数携带至服务器。cookie是浏览器实现的一种数据存储功能,是name=value的键值对。

优点:不占用服务器资源,效率高。

缺点:数据安全性较低。

什么是session?

session基于cookie实现,存储于服务端,sessionID会被存储到客户端cookie中,浏览器第二次访问服务器时,服务器从cookie中获取sessionID查找对应session信息,存在说明用户已登录。

优点:安全性较高。

缺点:占用服务器资源,可能会占满,多台服务器下又会出现session存储在其中一台服务器上,其他服务器没法使用的情况,可以用redis服务器去解决,所有服务器都去调用redis服务器。

cookie和session区别

cookie存于客户端,session存于服务器。

cookie中数据不能超过4k,session存储空间大于cookie。

cookie只能存字符串,其他类型会被转为字符串类型,session可存储任意数据类型。

cookie的安全性比session低。

cookie和session执行流程

浏览器第一次向服务器发送请求,服务器检查是否有携带JSESSIONID的cookie。

如果存在,将cookie值取出,在服务器的session池中找到对应的session进行是否登录的校验。

如果不存在,服务器会创建一个session对象,并随机生成一个唯一的sessionID,保存到session池中,在响应浏览器时服务器会在http包的header中创建一个建为JSESSIONID,值为sessionID的cookie对象包含在Set-Cookie属性中返回给浏览器,浏览器将其存储起来下次访问时携带。

用户登出时,服务器会将session销毁,并生成新的JSESSIONID返回给浏览器,浏览器下次携带给服务器后通过JSESSIONID找不到对应的session说明用户是第一次登录。

不一定非要cookie和session配合使用,例如只用cookie也能实现相同功能,但将用户信息存放在cookie是有很大安全风险的,而将sessionID存放在cookie中则没有影响。

cookie的失效时间(会话cookie和持久cookie)

会话cookie

不设置过期时间,cookie保存在内存里,浏览器关闭,cookie就消失。

持久cookie

设置过期时间,setMaxAge(…),cookie保存在硬盘,只有时间过了才会失效。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 一篇搞懂cookie和session