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的生成方式有两种,服务器写入,客 ...
随机推荐
- iview简单使用+按需加载组件的方法(全局和局部)
1,简单使用 vue项目中使用iview非常简单: 首先安装依赖: $ npm install iview --save 会安装最新版本的依赖,安装完成后package.json会出现如下图配置 表示 ...
- Windows下安装jdk
1. 下载安装包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. 双击e ...
- wannafly 挑战赛9 D 造一造 (卡特兰数)
链接:https://www.nowcoder.com/acm/contest/71/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...
- python利器之切片
切片 切片的语法表达式为:[start_index : end_index : step],其中: start_index表示起始索引 end_index表示结束索引 step表示步长,步长不能为0 ...
- java多线程系列1:Sychronized关键字
1.Synchronized使用范围: 同步普通方法:锁的是当前对象 //包含synchronized修饰的同步方法的类addCountClass public class addCountClass ...
- PDFCrop裁剪PDF文档使用方法
使用VISIO画图,然后生成PDF文档插入到LaTeX文档中,会出现黑边框的问题.通过对PDF文件进行裁剪可以去掉黑边框,之前我是通过Acrobat进行裁剪,后来激活失效了..只好找其他方法.今天发现 ...
- Kotlin之定义函数
java: int add (int m ,int n){ return m+n; } void process(int m){ Systrm.out.println(m); } kotlin: fu ...
- selenium之css selector定位
什么是CSS Selector? Css Selector定位实际就是HTML的Css选择器的标签定位 工具 Css Selector的练习建议大家安装火狐浏览器(49及以下版本)后,下载插件Fire ...
- Maven 安装 / 常用配置 / 阿里maven中央仓库
Maven 官方下载地址: http://maven.apache.org/download.cgi 可以选择清华的镜像: 解压在settings.xml里面配置阿里中央仓库: <mirror& ...
- MM相关号码范围IMG设定
一.定义各物料类型的号码范围——MMNR 路径:後勤系統 - 一般 > 物料主檔> 基本設定 > 物料類型 >定義各物料類型的號碼範圍 2.定义供应商主档记录号码范围——OMS ...