Cookie、Session和LocalStorage
前记
前面我已经写了一篇关于Cookie的文章,但是那时候我其实理解的并不是很深刻,会有些搞不懂的地方,今天我就再写一次,博客也是我的学习笔记
Cookie
Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。
Cookie如何设置
Cookie的设置是在服务端来操作的,用户访问服务器,服务器响应中响应头带上
response.setHeader('Cookie', 'Max-Age=<non-zero-digit> ')//设置过期时间
Cookie的特性
- Cookie的默认是随着用户关闭时过期,但是服务器可以设置Cookie的使用时间还有过期时间
- Cookie可以设置HttpOnly来使用户不能通过JS来操作Cookie,HttpOnly类型的Cookie在一定程度上缓解XSS类攻击。
- 标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。
Cookie的缺陷
就像上面Cookie的特性中的2、3条说的,Cookie并不安全,因为Cookie如果包含着重要信息被人记录或者篡改,那就可以对用户的账户进行操作,所以为了改善这一个问题,就要用到接下来说的Session
Cookie总结
1、服务器通过Set-Cookie头给客户端一串字符串
2、客户端每次访问相同域名的网页时必须带上这段字符串
3、客户端要在一段时间内保存这个Cookie
4、Cookie默认在用户关闭时过期,后台可以设置Cookie存在时间
5、可以在控制台的Application中强制删除Cookie
Session
Session并不是HTTP协议中的一部分,Session是一个抽象的概念,是用来解决Cookie来标识用户而泄漏隐秘信息的一种方法,并且因为实现了中断和继续操作而叫‘会话’
Session的实现
- 服务器通过Cookie给用户一个SessionId
- SessionId对应着服务器中的一小块内存,这块内存存着用户的隐秘信息
- 每次用户访问服务器的时候,服务期就通过SessionId去读取对应的内存,就知道了用户的隐秘信息
Session的缺陷
从上面可以看出,Session最大的缺陷就是占服务器的内存
Session的总结
1、将SessionId(一般就是一个随机数)通过Cookie发给客户端
2、客户端访问服务器时,服务器读取SessionId
3、服务器有一块内存(对象)保存了所有的Session
4、痛殴SessionId我们可以得到对应用户的隐私信息,如id,email
5、这块内存(哈希)就是服务器上的Session
Session不使用Cookie的实现方法
- 不写Cookie,将SessionId返回给JS,通过JSON返回给前端
- 前端拿到这个响应将其变成对象
- 将这个SessionId存到LocalStorage中
- 页面跳转登录后,将SessionId写到查询参数中,后台通过查询参数知道当前的SessionId
- 然后通过SessionId去Session中查找出用户的信息
Session和Cookie的区别
从上面的内容中就可以发现,Session和Cookie的区别很大
首先Cookie是HTTP协议中的一部分,而Session是一个抽象的概念
然后Session是存放在服务器的内存中,而Cookie是存放在本地
最后Session一般是依赖于Cookie的,SessionId是通过 Cookie 发送给客户端的
LocalStorage
LocalStorage是HTML5提供的新的API,LocalStorage也是一个哈希,是一个存在浏览器上的哈希
LocalStorage的使用方法
用户设置的使用方法
localStorage.setItem('a', '1')
用户如何获取存的对象
localStorage.getItem('a')
用户如何清理
localStorage.clear()
LocalStorage的总结
- LocalStorage跟HTTP无关
- 只有相同域名的页面才能互相读取LocalStorage(没有同源那么严格)
- 每个域名的LocalStorage最大存储量为5M左右(由浏览器决定)
- 常用场景:记录有没有提示过用户(没有用的信息,不能记录密码)
- LocalStorage存储的信息永远有效,除非用户清除
SessionStorage和LocalStorage的区别
1、2、3、4条同上,但是SessionStorage在用户关闭页面后就失效了
LocalStorage和Cookie的区别
从上面也可以看出
- LocalStorage 不会随 HTTP 发给 Server
- LocalStorage 的大小限制比 Cookie(4K) 大多了
LocalStorage存在的原因
由于历史遗留问题,以前所有信息都放到Cookie中,但是每次请求都要带上Cookie,因此会上传很多无用的东西,影响速度,因此作为一个前端不要读写Cookie
想说的话
正式学习前端已经快三个月了,一步步深入就总感觉自己学的不够,自己很垃圾,但是幸好我能感觉到我有东西可以学,所以,在没学完的那一刻,我是不会停下来的,加油
来源:https://segmentfault.com/a/1190000016068840
Cookie、Session和LocalStorage的更多相关文章
- cookie session sessionStorage localStorage
什么是会话? 会话指的是浏览器与服务器之间的数据交互.所白了就是 浏览器和服务器进行的请求和响应. http协议是无状态的,多次请求之间没有关联性 cookie和session的作用?干啥的? 利用c ...
- Cookie、session和localStorage、以及sessionStorage之间的区别
一.Cookie.session和localStorage的区别 cookie的内容主要包括:名字.值.过期时间.路径和域.路径与域一起构成cookie的作用范围.若不设置时间,则表示这个cookie ...
- 6.cookie、session,localStorage、sessionStorage
必须在服务器下运行 cookie/session 存东西 cookie 时间 过期时间 4k 服务器把一部分数据保存在客户端(浏览器) session 回话 时间 服务器存取用户信息 5M local ...
- cookie session localstorage sessionStorage区别
cookie:http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html 重要特点: 1.cookie 有大小设置,有过期时间设 ...
- Cookie、session和localStorage的区别
一.Cookie.session和localStorage的区别 cookie的内容主要包括:名字.值.过期时间.路径和域.路径与域一起构成cookie的作用范围.若不设置时间,则表示这个cookie ...
- cookie ,session 和localStorage的区别详解
2019独角兽企业重金招聘Python工程师标准>>> cookie ,session 和localStorage的区别详解 博客分类: js 当你在浏览网站的时候,WEB 服务器会 ...
- cookie和session和localStorage的区别
这三个都是保存在浏览器端,而且都是同源的. Session仅在当前浏览器窗口关闭有效,不能持久保存 Localstorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据 Cookie只在设置 ...
- Cookie、Session、localStorage、sessionStorage区别和用法
Cookie 在学习一个新知识点前,我们应该明白自己的学习目标,要带着疑问去学习,该小节须要了解 Cookies 什么是cookie,cookie的作用 cookie的工作机制,即cookie是运作流 ...
- cookie,session,localStage,sessionStage区别
Cookie和Session详解 1.什么是Cookie Cookie是存放在客户端浏览器的Name/Value键值对,访问服务器时,会自动传递给服务器. Cookie的生成方式有两种,服务器写入,客 ...
随机推荐
- Mybatis 结果映射下划线转驼峰
mybatis 结果映射下划线转驼峰 Spring Boot 配置: #下划线转驼峰 mybatis.configuration.map-underscore-to-camel-case=true m ...
- STCubeMX软件新建Keil和IAR工程使用步骤:
STCubeMX软件新建Keil和IAR工程使用步骤:首先是软件下载(也可在我们的百度云下载):1.STCubeMX下载地址: http://www.stmicroelectronics.co ...
- JavaWeb-SpringBoot_使用H2数据库实现用户注册登录
使用Gradle编译项目 传送门 前端资源同:使用MySQL数据库实现用户管理_demo 传送门 H2:SpringBoot内置持久化数据库 使用H2数据库实现用户注册登录 用户可以在index.h ...
- XSS中的同源和跨域的问题
学习自https://www.cnblogs.com/-qing-/p/10966047.html 也谈谈同源策略和跨域问题 1 同源策略 所谓同源策略,指的是浏览器对不同源的脚本或者文本的访问方式进 ...
- Excel中使用Power Query获取网页json数据
Power Query下载地址 https://www.microsoft.com/zh-CN/download/details.aspx?id=39379 使用步骤 1.数据->其它源-> ...
- 排序算法(C++)
冒泡排序.选择排序.快速排序.插入排序.希尔排序.归并排序.基数排序.堆排序. 推荐网址1:https://www.cnblogs.com/onepixel/articles/7674659.html ...
- 二、Smarty中的三种主要变量
1.从PHP中分配的变量 $smarty -> assign(); 从PHP分配给模板使用的变量:动态变量 2.从配置文件中读取的变量 $smarty配置文件中的内容不是PHP读取,而是就在sm ...
- spark 笔记 4:Apache Hadoop YARN: Yet Another Resource Negotiator
spark支持YARN做资源调度器,所以YARN的原理还是应该知道的:http://www.socc2013.org/home/program/a5-vavilapalli.pdf 但总体来说, ...
- SecureCRT For Mac安装、破解、使用详细总结
转:https://blog.csdn.net/so_geili/article/details/83315852#_4 https://www.sednax.com/download.php
- 解决Oracle XE报错ORA-12516(oracle回话数超出限制)
本地安装的oracleXEUniv—oracle特别版,免费用户可以自由使用,但有连接数量和存储限制. 最近遇到一个问题,当我的SSM项目连接本地数据库oracleXE后,我的navicat再连接时就 ...