cookie、session、web storage
cookie与session的区别
首先,使用cookie和session的目的都是为了跟踪记录用户状态,因为http协议是无状态的协议,而某些场景服务端需要记录用户的状态,如购物车,需要来识别具体的用户,服务端就为特定的用户创建特定的session,用于标识并跟踪用户;
其次,cookie和session都是会话技术,session保存在服务端,cookie保存在客户端,服务端无法知道请求对应哪个session,依靠cookie来实现session的跟踪。
所以在跟踪用户方面,cookie与session属于互相配合的关系。浏览器第一次访问服务器会创建一个session对象,通过cookie返回到浏览器(服务端会在响应头里面添加一个Set-Cookie选项,浏览器收到这类响应后通常会保存下Cookie,用于标识用户)。
在使用限制方面,cookie可以在有效期内(setMaxAge()设置有效期或者默认关闭浏览器后就失效)保存信息,但是有大小限制(约5kB)以及浏览器对cookie的存储有个数限制(每个域名可能30、50个),如果个数过多,会使header大小超过服务器的处理限制;而session本身没有大小限制,但是和服务器的内存大小有关,session保存在服务端上存在一段时间才会消失,所以session过多会增加服务器的压力。
在安全方面,cookie有安全隐患,通过拦截得到cookie后可以进行攻击。
session可以认为是一个抽象概念,开发者为了实现中断和继续等操作,将user agent和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是session的概念。而cookie是一个实际存在的东西,http协议中定义在header中的字段,可以认为是session的一种后端无状态实现。
在使用方面,cookie除了可以跟踪会话,也可以保存用户喜好或者保存用户名密码等等,所以可以说cookie的用途更广泛。
cookie和localStorage的区别
第一,两者使用的出发目的不同,cookie最早是为了跟踪记录用户状态,用于客户端和服务端的信息传递,而localStorage的使用目的是为了在客户端存储一些简单的数据。
第二,两者的大小限制不同,cookie的限制比较小,大约是5kB,超过单个域名限制后,再设置cookie,浏览器会清除以前设置的cookie,而localStorage存储的大小就相对较大,业界主流是5MB。
第三,两者的存储期限不同,localStorage理论上来说永久有效,即不主动清空的话就不会消失,但移动设备的浏览器或者WebView中,可能会因为各种原因(退出app、网络切换、内存不足等原因)被清空;cookie就比较灵活,可以设置失效日期expires(GMT格式的时间),如果没有设置expires,这样的cookie称为会话cookie,它存在内存中,当会话结束,也就是浏览器关闭时,该cookie就消失。
第四,网络传输方面,每次HTTP请求,会自动将同域名的cookie添加到request header的cookie字段发送至服务器,但是可以设置Secure选项使cookie只在确保安全的请求中发送,所以如果cookie内容太多,会增加网络开销;localStorage的内容则不会被带上。
第五,浏览器支持情况方面,IE7及以下版本不支持web storage,cookie兼容性比较好。
第六,在操作方面,localStorage提供现有的API去访问操作,cookie需要自己来封装或者使用第三方库;但是cookie既可以由服务端来设置,也可以由客户端来设置,localStorage只能是客户端来设置。
另外,因为cookie比较灵活,还可以设置domain、path、httpOnly,domain和path一起来限制cookie能被哪些URL访问,即请求的URL是Domain或其子域、且URL的路径是Path或子路径,则可以访问该cookie;如果某个cookie设置了httpOnly,客户端就无法通过js代码去访问这个cookie。
总体来说,cookie用途多一些,也更灵活,但存储体积小,localStorage可以存储较多内容。
cookie的优缺点
- 缺点
- 每个域名下的cookie个数有限
- 存储量太小,只有5kB
- 每次HTTP请求都会发送到服务器,影响获取资源的效率
- 需要自己封装获取、设置、删除cookie的方法
- 优点
- 比较灵活
- 用途多
sessionStorage与localStorage
sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,并且当会话结束后,数据也随之销毁,所以sessionStorage仅仅是会话级别的存储,而不是一种持久化的本地存储。
localStorage是持久化的本地存储,除非是通过JS删除,或者手动清除缓存,否则理论上数据不会过期。
使用场景区别
cookie由于体积小,并不适合专门用于存储用途,主要还是适用于会话凭证。
localStorage和sessionStorage因为体积较大(业界主流为5MB),又主要以字符串的形式存储,更适合用于存储客户端的简单数据。
sessionStorage的数据由于在会话结束后就会被销毁,更适合对安全性要求较高的场景;也适用于存储一些与当前会话关联性较强的数据,比如记录跳转的路由信息,在别的会话窗口就不适用,就可以存储在sessionStorage中。
如果有更多大量复杂结构的数据需要存取访问,可以考虑使用indexDB,但需要考虑indexDB的兼容性。
cookie、session、web storage的更多相关文章
- 3 分钟带你深入了解 Cookie、Session、Token
经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...
- 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别
首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...
- [转]cookie、session、sessionid 与jsessionid
cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...
- cookie、session、sessionid ,jsessionid 的区别
本文是转载虫师博客的文章http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html cookie.session.sessionid 与js ...
- 【python】-- Django 分页 、cookie、Session、CSRF
Django 分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...
- application、session、request、page的作用范围、Application,Session和Cookie的区别
Web应用中的JSP和servlet都是由web服务器来调用,Jsp和Servlet之间通常不会相互调用,那么Jsp和Servlet之间交换数据就要用到application.session.requ ...
- cookie、session、token的区别与联系
https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...
- 傻傻分不清之 Cookie、Session、Token、JWT
傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...
- 一文彻底搞懂Cookie、Session、Token到底是什么
> 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 Cookie 洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅. 大爷:什么都没啊? 夏洛:马冬梅啊. 大爷:马什 ...
- 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚
还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...
随机推荐
- 2022-1-10 控件学习1 TextBlock、Lable、TextBox
TextBlock LineBreak:在指定位置手动换行和<br/>类似 TextTrimming: CharacterEllipsis没有足够空间时显示...,WordEllpsis以 ...
- 【游戏开发笔记】编程篇_C#面向对象 {下}
@ 目录 7.定义类 7.1 C#中的类定义 7.1.1 接口的定义 7.1.2 修饰符 7.2 System.Object 7.3 构造函数和析构函数 7.4 结构类型 7.5 浅度和深度复制 8. ...
- ubuntu 安装pip3 报错
运行命令 sudo apt install python3-pip 报错: 有几个软件包无法下载,要不运行apt-get update 或加上--fix-missing试试 输入命令: sudo ap ...
- MySQL8_SQL语法
MySQL8_SQL语法 SQL 全称 Structured Query Language,结构化查询语言.操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 . 一.SQL通用语法 在学 ...
- 《代码整洁之道 Clean Code》学习笔记 Part 1
前段时间在看<架构整洁之道>,里面提到了:构建一个好的软件系统,应该从写整洁代码做起.毕竟,如果建筑使用的砖头质量不佳,再好的架构也无法造就高质量的建筑.趁热打铁,翻出<代码整洁之道 ...
- Kioptrix Level 1
Kioptrix这个系列靶机默认是桥接模式,如果我们kali使用NAT是扫描不到靶机的,通过VM的靶机网络设置也不能更改成功. 解决方式:每次下载好靶机先不导入VM,如果已经导入,需要"移除 ...
- 谈一谈电商api的未来
随着互联网的飞速发展,电商行业已经成为了现代消费的主流模式.在电商平台上,商品的交易.物流.支付等环节都需要使用API(Application Programming Interface)接口来实现信 ...
- chatglm2-6b在P40上做LORA微调
背景: 目前,大模型的技术应用已经遍地开花.最快的应用方式无非是利用自有垂直领域的数据进行模型微调.chatglm2-6b在国内开源的大模型上,效果比较突出.本文章分享的内容是用chatglm2-6b ...
- 《Hadoop大数据技术开发实战》新书上线
当今互联网已进入大数据时代,大数据技术已广泛应用于金融.医疗.教育.电信.政府等领域.各行各业每天都在产生大量的数据,数据计量单位已从B.KB.MB.GB.TB发展到PB.EB.ZB.YB甚至BB.N ...
- HTML视频背景(动态背景)
网页动态背景一般是用视频实现的,能增添网页的感染力,我觉得很好看,也不难,不妨学一下. 先加入下面一串代码: 1 <style> 2 video{ 3 height: 100%; 4 wi ...