Cookie、session、WebStorage、sessionID、token

105 阅读3分钟

Cookie 和 Session

  • 两者都是用来记录用户登录信息的,前者以key-value形式保存在客户端,后者保存在服务器
  • 由于HTTP协议是无状态的协议,单纯的http请求无法让服务器获取客户端的状态(如登录信息),因此就出现了Cookie来记录客户端的状态信息。
  • Cookie是保存在客户端的一个文本文本,在每次向服务器发送请求时都会在请求头中携带这个信息来告知服务器,实现两者之间信息的传递。
  • 当用户第一次登录时,输入用户名和密码向服务器发送请求,服务器会新建session来记录用户信息,并在响应头中设置set-cookie将用户的登录信息(sessionid)传递给客户端并由客户端保存
  • Cookie的一些属性:
    • expires: 设置cookie的失效时间,默认是一次会话时间
    • domain:访问文件的域名,与path一起限制了哪些url能够访问此cookie
    • path: 访问文件的路径
    • secure:设置此属性后只有在确保安全的请求中才能发送此cookie,如http请求和其他较为安全的请求
    • httponly:设置此属性后客户端不能通过js代码访问此cookie

WebStorage

  • localStorage
    • 浏览器提供的一种持久化本地缓存方式,只有在手动清除缓存或者js删除时,否则将一直被保存,且可以跨页面共享
    • 注意不能跨浏览器共享
    • 常用于一些长期登录(或者判断用户是否已经登陆),适合存储长期保存在本地的数据
  • sessionStorage
    • localStorage类似,不同的是它的生命周期在一个会话中,当用户关闭浏览器窗口时,数据将会被清除;
    • 如果同时开两个标签页,两者的数据不共享
    • 适合一些敏感信息一次性登录场景

WebStorage 相比 Cookie 的优点

  • 存储空间更大:cookie只能存储4KB的数据,而webStorage可以存储5MB的数据
  • 节省网络流量:WebStorage中的数据保存在客户端不会被携带者发送到服务器;而cookie每次请求时都会被携带着发送给服务器
  • 操作方便:浏览器提供了一些直接操作WebStorage的方法: setItem()addItem()removeItem()clear()

SessionID与token的区别

  • 两者都可以用来作为判断用户是否登录的唯一凭证
  • sessionid 一般会被服务器放在在响应头set-cookie字段中发送给客户端,等用户下次登录时携带cookie信息发送给服务器,服务器取到sessionid找到对应的session以此判断用户是否登录;根据sessionid来判断需要取到session,服务端需要存储sessionidsession——空间换时间
  • token是一种新的判断用户登录状态的方式,通过向服务器请求获取token信息并由客户端保存在浏览器,下次请求时在请求头中携带此字段判断用户登录状态,服务器不需要存储用户信息——判token是否合法