Cookie vs Session


未完待续

Cookie vs Session

首先要知道,cookie和session是无法放在一起对比的,因为他们维度不同

  • cookie 是一个实际存在的东西, http 协议中定义在 header 中的字段。

  • session
    session是一个抽象概念,指客户端与服务端维持的一个有状态会话
    开发者为了实现中断和继续等操作,将 client和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。

具体到实现,session 因为 session id 的存在,通常要借助 cookie来实现,但不是唯一的实现方式。只能说是通用性较好的一种实现方案。如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id

区别

  • 安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。所以session不会任意读取客户存储的信息

  • 存取值的类型不同:
    Cookie 只支持存字符串数据,Session 可以存任意数据类型

  • 有效期不同: Cookie 可设置为长时间保持,而Session 一般失效时间较短。

  • 存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储的数据量远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

cookie+session工作原理

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
  • 请求返回时,将此 Session 的唯一标识信息 SessionID 一并返回给浏览器。
  • 浏览器接收到服务器返回的 SessionID 后,会将它存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
  • 当用户再次访问服务器的时候,会自动将 Cookie 信息发送给服务端,服务端会从 Cookie 中获取 SessionID,服务端会根据 SessionID 查找对应的 Session 信息

Cookie

为什么需要Cookie?
因为HTTP是无状态的协议(每个请求都是完全独立的)
所以浏览器每次请求服务器都需要验证自己的身份,cookie类似身份证用于证明用户的身份。有效降低验证身份的复杂度。

缺点

Cookie字符串的长度有限制。超过会被截掉。

安全性问题
因为存储在客户端,容易被篡改,所以不能存储敏感数据,比如用户密码,账户余额。

Session

什么是Session(会话)?
客户端访问服务器的 整个过程称之为一个会话,session就是记录服务器和客户端会话状态的机制。

session存储了用户的本次会话的信息,当用户访问服务器时可以直接取出session中的数据进行使用。

session默认失效时间是30分钟。

session 实现方式
session 一般是基于 cookie 实现,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中,随cookie发送到服务器端。

如果客户禁用cookie怎么办?
当客户端浏览器禁用cookie时,sessionId也可以放在URL中返回给服务器

session 缺点:

  • 时效有限
    关闭浏览器之后,Cookie失效,SessionID随之丢失,就找不到上一次登录的Session了,那么下次登录就需要重新创建Session
    所以session只能够保证本次会话的免登录,无法实现例如半个月免登。

  • session占用内存过多问题
    由于session 存储在服务器里面,当用户同时在线量比较多时,这些 session 会占据较多的内存,需要在服务端定期的去清理过期的 session

  • 分布式session共享问题
    当网站采用集群部署的时候,session 可能是由A服务器创建的,但是处理用户请求的服务器可能是B,那么B服务器是无法拿到存在A服务器的session信息的
    如何解决分布式session共享问题?
    分布式缓存:用redis存储session信息。每台服务器都到redis拿数据

自己的一点思考

只要关闭浏览器 ,session 真的就消失了?
没有消失。对 session 来说,除非程序通知服务器删除一个 session,否则服务器会一直保留。
恰恰是由于关闭浏览器不会导致 session 被删除,迫使服务器为 session 设置了一个失效时间,当距离客户端上一次使用 session 的时间超过这个失效时间时,服务器就认为客户端已经停止了活动,才会把 session 删除以节省存储空间

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值