Cookie & Session & LocalStorage

Cookie

一、什么是Cookie?
1、Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据
2、浏览器需要保存这段数据,不得轻易删除
3、此后每次浏览器访问该服务器,都必须带上这段数据。但是,如果Cookie太多太大会对传输效率有影响
目的:用来记录某些当前页面关闭或刷新后,仍需记录的信息
二、服务器给客户端(浏览器)发送Cookie的方法
1、在服务端使用HTTP协议规定的set-cookie来让浏览器种下Cookie
2、使用js在浏览器直接设置
三、Cookie常见的两个作用
1、识别用户身份
比如用户 A 用浏览器访问了 http://a.com,那么 http://a.com 的服务器就会立刻给 A 返回一段数据「uid=1」(这就是 Cookie)。当 A 再次访问 http://a.com 的其他页面时,就会附带上「uid=1」这段数据。
同理,用户 B 用浏览器访问 http://a.com 时,http://a.com 发现 B 没有附带 uid 数据,就给 B 分配了一个新的 uid,为2,然后返回给 B 一段数据「uid=2」。B 之后访问 http://a.com 的时候,就会一直带上「uid=2」这段数据。
借此,http://a.com 的服务器就能区分 A 和 B 两个用户了。
2、记录历史
假设 http://a.com 是一个购物网站,当 A 在上面将商品 A1 、A2 加入购物车时,JS 可以改写 Cookie,改为「uid=1; cart=A1,A2」,表示购物车里有 A1 和 A2 两样商品了。
这样一来,当用户关闭网页,过三天再打开网页的时候,依然可以看到 A1、A2 躺在购物车里,因为浏览器并不会无缘无故地删除这个 Cookie。
借此,就达到里记录用户操作历史的目的了。
四、其他可选的Cookie参数会影响将Cookie发送给服务器端的过程,主要有以下几种:
1、path:表示 cookie 影响到的路径,匹配该路径才发送这个 cookie。
2、expires 和 maxAge:告诉浏览器这个 cookie 什么时候过期,expires 是 UTC 格式时间,maxAge 是 cookie 多久后过期的相对时间。当不设置这两个选项时,会产生 session cookie,session cookie 是 transient 的,当用户关闭浏览器时,就被清除。一般用来保存 session 的 session_id。
3、secure:当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
4、httpOnly:浏览器不允许脚本操作 document.cookie 去更改 cookie。一般情况下都应该设置这个为 true,这样可以避免被 xss 攻击拿到cookie。

Session

一、什么是Session?
cookie 虽然很方便,但是使用 cookie 有一个很大的弊端,cookie 中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能存放在 cookie 中了,而且如果 cookie 中数据字段太多会影响传输效率。为了解决这些问题,就产生了 session,session 中的数据是保留在服务器端或数据库中的。
举例:当一个用户打开淘宝登录后,刷新浏览器仍然展示登录状态。服务器如何分辨这次发起请求的用户是刚才登录过的用户呢?这里就使用了session保存状态。用户在输入用户名密码提交给服务端,服务端验证通过后会创建一个session用于记录用户的相关信息,这个 session 可保存在服务器内存中,也可保存在数据库中。
二、Session的运作通过一个session_id来进行
1、创建session后,会把关联的session_id 通过setCookie 添加到http响应头部中。
2、浏览器在加载页面时发现响应头部有 set-cookie字段,就把这个cookie 种到浏览器指定域名下。
3、当下次刷新页面时,发送的请求会带上这条cookie, 服务端在接收到后根据这个session_id来识别用户。

区分Cookie&Session

一、区别:
1、cookie 是存储在浏览器里的一小段「数据」
2、session是一种让服务器能识别某个用户的「机制」
3、二者不是同一维度的东西
二:关联
1、session 在实现的过程中需要使用cookie
2、cookie和session都是用来跟踪浏览器用户身份的会话方式(即记录用户状态)。cookie记录在浏览器上,过期与否可以在cookie生成的时候设置进去,session记录在服务器上,过期与否取决于服务器的设定。

LocalStorage

一、 LocalStorage的特点
1、localStorage HTML5本地存储web storage特性的API之一,用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用 js手动清除
2、不参与网络传输
3、一般用于性能优化,可以保存图片、js、css、html 模板、大量数据
二、怎么将对象存入 LocalStorage里面
由于 LocalStorage里面存储的是字符串格式的数据,所以如果直接存入对象,会导致存入的数据丢失,解决方法是将对象转化为字符串存入。

//将对象转化为字符串
localStorage['name'] = JSON.stringify({a:1,b:2})       //"{"a":1,"b":2}"
//将字符串还原为对象
JSON.parse(JSON.stringify({a:1,b:2}))       //{a: 1, b: 2}     

[参考资料]
简述Cookie是什么?
浏览器存储

    原文作者:IrisLong
    原文地址: https://www.jianshu.com/p/52798c57d911
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞