聊一聊cookie、session和webstorage

首先我们要知道HTTP是无状态的协议:什么是状态?状态的主体是信息,这些信息是有服务器所维护的与客户端交互的信息(也称状态信息),因为HTTP本身是不保存任何用户状态信息的,所以认为HTTP是无状态的协议。 而无状态是指客户端每一次向服务端发送请求都会被服务器认为是新请求,上一次会话和下一次会话是没有联系的,客户端可以向服务端发送多次请求,但是各个请求之间的并没有什么联系。

cookie和session

cookie和session的出现很好的解决了HTTP是无状态的问题。cookie和session体系机制可以维护状态信息。

什么是cookie?

cookie存储在客户端的:cookie是服务器发送到用户浏览器,并保存在本地的一小块数据,大小不超过4k,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。cookie是以键值对存储的键值对,key=value,都必须是字符串类型

什么是session?

session是另一种记录服务器客户端会话状态的机制
session是基于cookie实现的,session存储在服务器端,sessionId 会被存储到客户端的cookie 中。

session 认证流程:

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
  • 请求返回时将此 Session 的唯一标识信息SessionID 返回给浏览器
  • 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时Cookie 记录此 SessionID 属于哪个域名
  • 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。

根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。
sessionId 是存储在 cookie 中的,假如浏览器禁止 cookie 或不支持 cookie 怎么办? 一般会把 sessionId 跟在 url 参数后面即重写 url,所以 session 不一定非得需要靠 cookie 实现

cookie和session的区别
存储方式: cookie数据存储在客户端,session数据存储在服务器端
安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的
有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失 效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

应用场景
cookie:
(1)判断用户是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
(2)保存上次登录的时间等信息。
(3)保存上次查看的页面
(4)浏览计数
session:Session用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户。
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)防止用户非法登录

webStorage

HTML5中提出了webStorage的概念,webStorage包括sessionStorage和localStorage,和cookie一样都是在客户端储存数据,但webstorage只为了保存数据,不会与服务器进行通信。

  • webStorage拥有更大的存储量,cookie大小限制4kb,webStorage达到5M或更大
  • webStorage拥有setItem,getItem,removeItem,clear等api,数据操作比cookie方便
  • webstorage生命周期:
    sessionStorage:仅在当前网页会话下有效,关闭页面或浏览器后就会被清除
    localStorage:除非被手动清除,否则永久保存
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值