cookie 和session的异同

cookie 和session的异同

引用Cookie和Session的区别(面试必备)_cookie和session的作用和区别-CSDN博客 傻傻分不清之 Cookie、Session、Token、JWT - 掘金 (juejin.cn)自己只是搬运工,增强理解。

他俩出现的原因

因为http是无状态的,也就是你访问的请求是没有上下文的,每次请求相当于第一次请求,但是随着网络的发展,上下文信息成为了必要的功能,我们需要网站记录一些必要的上下文信息实现更好的人性化。因此出现了cookie和session,这里简单描述一下原理:

cookie

这个技术是把server生存的cookie信息存储到用户浏览器的,server是不存储cookie信息的(这里有个坑,疑惑了我一下,server是不存储cookie的,那么client发送的cookie信息是如何被server解析识别的呢,找了很久才发现,server确实不存储cookie,但是它存储一些cookie里面的值,这个值可以唯一标识用户,然后server根据这个值获取到不同用户的信息),具体生成流程如下

  1. 浏览器第一次请求server
  2. server创建cookie发送给client,server记录一下cookie里唯一标识用户的信息
  3. client把cookie保存在浏览器中,之后请求server带上cookie信息
  4. server解析cookie得到唯一标识用户信息的数据识别client

经过上面的cookie,server就可以保存用户信息,比如登录界面的免二次登录的实现,cookie可以设置过期时间,过期后就需要重新走正常访问流程,不可以使用cookie访问。

session

这个叫会话,听名字也可以听出,这个东西的生存周期只是一个会话,会话结束就删除了,这个信息是存储在server端的,同样client也会存储一些唯一标识用户的信息,每次client发送请求带上这个唯一标识用户的信息给server,让server确定不同用户,只要浏览器关闭会话结束(也可以设置过期时间,不让他直接关闭),那么session就失效,描述一下过程

  1. client浏览器第一次请求server,server创建一个session保存在server,同时生产一个特殊的cookie,name是固定的’JSESSIONID’,值是唯一标识用户的sessionid。
  2. 之后client每次请求server都会带上这个特殊的cookie
  3. server根据请求的cookie里的sessionid信息来区分不同的用户
token

是一种资源凭证,主要有用户唯一标识符、时间戳和server的数字签名组成,这个可以实现server无状态化,也就是server不需要存储一些信息,主要的流程描述

  1. 客户端使用用户和密码登录
  2. server收到请求后进行验证
  3. 验证成功,server就对一些信息进行数字签名生成一个token,发送给客户端
  4. 客户端将token存储,每次请求都带上token信息
  5. server收到请求信息,验证token,验证成功就返回请求信息

这里server不用存储token信息,只要client才会存储,server对token进行解析验证代替了存储信息,算是时间换空间,因为信息存在磁盘很耗时

refresh token

这个是上述token的一种扩展,向客户端返回token时,多加一个refresh token,token的过期时间较短,但是refresh过期时间较长,可以使用refresh token获取新的token,不需要再次验证用户和密码,refresh token及过期时间存在数据库中(不是redis中),只有当重新申请token时才会访问,不会造成server压力增大

总结

分析完发现都不太安全,都可以被窃取,唯一可以安全的就是设置过期时间,要不然cookie和session被窃取后都可以篇server,我认为session比cookie安全的原因可能server存储的session信息不会只判断sessionid,会根据请求的信息做一些其他的判断,而cookie存在client,server没有数据做一些其他的判断。

sesson和cookie区别

相同点

  1. 都是不可以跨域的,session也是靠cookie实现的
  2. 都是对server状态机制的扩展
  3. 都需要存储一些状态信息来进行连接状态化

不同点

  1. cookie存储在client浏览器,session存储在server
  2. session当用户变多,会很占用空间
  3. session相对cookie较为安全。
  4. Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
  5. 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
  6. session过期时间一般较短,会话关闭就结束,cookie过期时间一般较长
  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值