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的生成方式有两种,服务器写入,客 ...
随机推荐
- 哈密尔顿环x
欧拉回路是指不重复地走过所有路径的回路,而哈密尔顿环是指不重复地走过所有的点,并且最后还能回到起点的回路. 代码如下: #include<iostream> #include<cs ...
- JS框架_(Popup.js)3D对话框窗口插件
百度云盘 传送门 密码:afdo 3D对话框窗口插件效果: <!doctype html> <html lang="zh"> <head> &l ...
- python学习之路(17)
sorted 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大 ...
- oracle条件参数中 IN函数中的值最大只能为1000个
delete from dep where id in(1,2,3.....) 括号里面字段个数最大只能为1000个
- Python--安装第三方库的方法
一:安装方法(以numpy为例,安装其他包把numpy改为包名即可) 1.有设置python包中pip.exe环境变量的情况下 同时按住win+R输入cmd打开cmd,直接输入pip install ...
- scrum例会报告+燃尽图02
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9955 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...
- MongoDB中的_id和ObjectId
ObjectId是"_id"的默认类型.它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它. 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自 ...
- C# 截取屏幕局部
//截取全屏图象 private void btnFullScreen_Click(object sender, EventArgs e) { //创建图象,保存将来截取的图象 Bitmap imag ...
- DP练习题——洛谷P1970花匠
目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...
- C#三种常用的读取XML文件的方法
下面我将介绍三种常用的读取XML文件的方法.分别是 1: 使用 XmlDocument 2: 使用 XmlTextReader 3: 使用 Linq to Xml 这里我先创建一个XML文件,名为Bo ...