前端数据存储系列(Cookie、Session、localStorage、sessionStorage、Token)

这篇具有很好参考价值的文章主要介绍了前端数据存储系列(Cookie、Session、localStorage、sessionStorage、Token)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Cookie和Session的联系与区别

简述:
Session比Cookie安全,Session是存储在服务器端的,Cookie是存储在客户端的
背景:
HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。
于是想说客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

什么是Cookie(小甜饼?)

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。
Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下客户端再向服务端发起请求时,客户端会自动在请求报文中加入Cookie值之后发送出去

保存时间
默认情况下,当浏览器关闭后,Cookie数据被销毁

持久化存储:
setMaxAge(int seconds)
正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
负数:默认值
零:删除cookie信息

应用
cookie一般用于存出少量的不太敏感的数据
在不登录的情况下,完成服务器对客户端的身份识别

缺点
内存小,限制 4KB。数量限制每个浏览器实现不一样,chrome 是 50 个。
默认有跨域限制,不可设置跨域共享 cookie,不可设置跨域传递 cookie

什么是Session

session本意是指客户端与服务器的会话状态,由于凭证存储到了服务端,后来也把这些存在服务端的信息称为session,比如现在服务器决定自己维护登录状态,仅发给客户端一个key,然后在自己维护一个key-value表,如果请求中有key,并且在表中可以找到对应的value,则视为合法。

销毁时间
session什么时候被销毁?

  1. 服务器关闭
  2. session对象调用invalidate() 。
  3. session默认失效时间 30分钟 选择性配置修改
    缺点
    比如 A 服务器存储了 Session,就是做了负载均衡后,假如一段时间内 A 的访问量激增,会转发到 B 进行访问,但是 B 服务器并没有存储 A 的 Session,会导致 Session 的失效
    同时session还要考虑跨域问题,不过可以使用redis缓存实现,详见 跨域解决了,那Session怎么办

区别

  1. cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的
  2. Session没有数据大小限制,Cookie有
  3. Session数据安全,Cookie相对于不安全
  4. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE

联系

session依赖于cookie
服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie,因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用(但是这是在你真的就完全不做任何操作的情况下)。
session不是必须依赖cookie!!!
如果客户端禁用了cookie怎么办呢?
答:

  1. url重写
这种方法让服务器收到的每个请求中都带有sessioinId

在每个页面中的每个链接和表单中都添加名为jSessionId的参数,值为当前sessionid。
当用户点击链接或提交表单时
服务器可以通过获取jSessionId这个参数来得到客户端的sessionId,找到sessoin对象

或者:

使用response.encodeURL()对每个请求的URL处理
这个方法会自动追加jsessionid参数,与上面的手动添加效果是一样的

<a href='<%=response.encodeURL("/jsp/index.jsp") %>' >主页</a>

它更加智能:它会判断客户端浏览器是否禁用了Cookie,如果禁用了,那么这个方法在URL后面追加jsessionid,否则不会追加。

  1. 表单隐藏字段
服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器
<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form> 

Token

cookie方法不需要服务器存储,但是凭证容易被伪造,那有什么办法判断凭证是否伪造呢?

和HTTPS一样,我们可以使用签名的方式帮助服务器校验凭证。

Token可以避免CSRF攻击

Token可以是无状态的,可以在多个服务间共享

JSON Web Token(简称JWT)是以JSON格式存储信息的Token,其结构图如下

组成

 JWT由3部分构成:头部,负载和签名。

头部存储Token的类型签名算法(上图中,类型是jwt,加密算法是HS256)
负载是Token要存储的信息(比如存储用户姓名和昵称信息)
签名是由指定的算法,将转义后的头部和负载,加上密钥一同加密得到的。

最后将这三部分用.号连接,就可以得到了一个Token了。

使用JWT维护登陆态,服务器不再需要维护状态表,他仅给客户端发送一个加密的数据token,每次请求都带上这个加密的数据,再解密验证是否合法即可。由于是加密的数据,即使用户可以修改,命中几率也很小。

token的储存

一般客户端用以下方式储存token

  1. 存在cookie中,虽然设置HttpOnly可以有效防止XSS攻击中token被窃取,但是也就意味着客户端无法获取token来设置CORS头部。
  2. 存在sessionStorage或者localStorage中,可以设置头部解决跨域资源共享问题,同时也可以防止CSRF,但是就需要考虑XSS的问题防止凭证泄露。

token与cookie的区别

  1. cookie 是 http 规范,token 是自定义传递的。
  2. cookie 没有被浏览器存储(内存是临时存储,关机后信息就没了。硬盘是长久存储,不删除就一直在),下一次请求时便会带上。而 token 需要自己存储在浏览器,下一次请求时再请求头中带上。
  3. token 默认没有跨域限制。
  4. token可以抵抗csrf,cookie+session不行

因为form 发起的 POST 请求并不受到浏览器同源策略的限制,因此可以任意地使用其他域的 Cookie 向其他域发送 POST 请求,形成 CSRF 攻击。在post请求的瞬间,cookie会被浏览器自动添加到请求头中。但token不同,token是开发者为了防范[CSRF]或XSRF(Cross-site request forgery跨站请求伪造)而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击。

所以:session是比cookie更好的一种解决方案。token成为主流,是因为他不需要额外的存储管理

Web Storage

在 Web Storage 本地存储 包括 sessionStorage 会话存储 和 localStorage 本地存储。
cookie 和 session 完全是服务器端可以操作的数据,sessionStorage 和 localStorage 完全是浏览器端操作的数据。

localStorage与sessionStorage

sessionStorage 和 localStorage 的编程接口是一样的。
sessionStorage 和 locatlStorage 区别在于 数据存在时间范围 和 页面范围。

sessionStorage: 数据只保存到存储它的窗口或标签关闭时,数据在构建它们的窗口或标签内也可见

localStorage: 数据的生命周期比窗口或浏览器的生命周期长,数据可被同源的每个窗口或者标签共享,如果一个浏览器同时打开两个tab,localstorage和cookie是共享的,sessionstorage是不共享的

注意:
localstorage,sessionstorage在浏览器无痕模式下会存在丢失问题

localStorage、sessionStorage、cookie 区别

前端数据存储系列(Cookie、Session、localStorage、sessionStorage、Token)

参考文章:

Cookie 和 Session 关系和区别
如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie
session依赖cookie,如果浏览器禁用了cookie呢文章来源地址https://www.toymoban.com/news/detail-423860.html

到了这里,关于前端数据存储系列(Cookie、Session、localStorage、sessionStorage、Token)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue】浏览器缓存sessionStorage、localStorage、Cookie

    目录 一、sessionStorage 1、简介 2、方法 3、代码示例 a、存取单个数据 b、存取对象 c、清除数据 二、localStorage 1、简介 2、方法 3、代码示例 三、cookie 1、简介 2、方法 3、代码示例 四、三者区别 1、sessionStorage与localStorage区别 2、sessionStorage、localStorage、cookie区别 五、往期相关优

    2024年02月07日
    浏览(27)
  • sessionStorage和localStorage 的区别和使用,具体与 session 区分

    sessionStorage和localStorage是浏览器提供的Web Storage机制,用于存储在客户端(浏览器)本地的数据。它们之间的区别主要体现在以下几个方面: 1. 数据作用域: - sessionStorage:存储在sessionStorage中的数据仅在当 前会话期间有效 ,即在浏览器同一个窗口或标签页打开的时间范围内

    2024年02月09日
    浏览(31)
  • 原生JavaScript实现本地存储(localStorage)和会话存储(sessionStorage)

    目录 一、简单介绍 二、localStorage本地存储 三、sessionStorage会话存储 本地存储和会话存储的目的,是将所输入的文件存入到浏览器中,在需要的时候,直接调用,但是本地存储和会话存储有着一定的区别,本地存储,在不主动删除的情况下,会一直保留在浏览器中,会话存储是

    2023年04月08日
    浏览(32)
  • 利用HTML5存储对象:localStorage和sessionStorage解析

    前端朋友们,你是否曾为如何在用户的浏览器中存储数据而感到困扰?你是否想过,如果可以在用户的浏览器中存储一些数据,那么我们的应用程序将会变得多么强大?如果你的答案是肯定的,那么本文将为你解锁一种新的能力——使用HTML5的localStorage和sessionStorage。 HTML5引入

    2024年02月05日
    浏览(27)
  • 【温故而知新】HTML5存储localStorage/sessionStorage

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月18日
    浏览(41)
  • 表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

    目录 表白墙引入数据库  再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 1.先引入数据库的依赖(驱动包),5.1.49 pom.xml中,在之前的两个之前,再去添加一个 2.创建本地的数据库 3.之前的代码中有一段可以删掉了 这个代码需要删除,因为我们已

    2024年02月08日
    浏览(44)
  • 前端存储使用localForage代替localStorage

    localForage是一个JavaScript库,能够类似localStorage的存储。 他是异步存储,可以优化你的web应用程序的离线体验,而且能存储多种类型的数据。 支持es6的 Promises API,而且支持添加回调函数。 安装成功后,即可在项目中使用,这里以vue为例: 与localStorage大致相同:https://developer.

    2024年02月16日
    浏览(40)
  • Vue中如何进行状态持久化(LocalStorage、SessionStorage)

    在Vue应用中,通常需要将一些状态进行持久化,以便在用户关闭浏览器或刷新页面后,仍能保留之前的状态。常见的持久化方式包括 LocalStorage 和 SessionStorage 。本文将介绍如何使用这两种方式来实现状态的持久化。 LocalStorage 是HTML5中引入的一种持久化方式,它可以将数据存储

    2024年02月09日
    浏览(38)
  • Websocket、Session&Cookie、前端基础知识

    目录 1.Websocket Websocket与HTTP的介绍 不同使用场景 Websocket链接过程 2.SessionCookie Cookie的工作原理 Session的工作原理 区别 3.前端基础知识 HTTP: 1. HTTP 是单向的,客户端发送请求,服务器发送响应。每个 HTTP 或 HTTPS 请求每次都会新建与服务器的连接,并且在获得响应后,连接将自

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包