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的更多相关文章

  1. 3 分钟带你深入了解 Cookie、Session、Token

    经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...

  2. 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别

    首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...

  3. [转]cookie、session、sessionid 与jsessionid

    cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...

  4. cookie、session、sessionid ,jsessionid 的区别

    本文是转载虫师博客的文章http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html cookie.session.sessionid 与js ...

  5. 【python】-- Django 分页 、cookie、Session、CSRF

    Django  分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...

  6. application、session、request、page的作用范围、Application,Session和Cookie的区别

    Web应用中的JSP和servlet都是由web服务器来调用,Jsp和Servlet之间通常不会相互调用,那么Jsp和Servlet之间交换数据就要用到application.session.requ ...

  7. cookie、session、token的区别与联系

    https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...

  8. 傻傻分不清之 Cookie、Session、Token、JWT

    傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...

  9. 一文彻底搞懂Cookie、Session、Token到底是什么

    > 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 Cookie 洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅. 大爷:什么都没啊? 夏洛:马冬梅啊. 大爷:马什 ...

  10. 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚

    还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...

随机推荐

  1. (数据科学学习手札153)基于martin的高性能矢量切片地图服务构建

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,在日常研发地图类应用的场景中, ...

  2. FreeBSD 内核模块和硬盘相关

    查看已加载的内核模块 使用命令:kldstat 加载驱动: kldload xx 查看识别到的硬盘 使用命令:dmesg | grep sector freeBSD 查看硬件信息 使用命令:dmesg ...

  3. test20230225考试总结(2023春 · 图论)

    前言 I hate questions that already exist!! 我讨厌原题!! 赛时得分明细: A B C D E F Total Rank 100 100 10 56 0 44 3 ...

  4. SpringBoot 启动流程分析(寻找扩展点)

    1.SpringBoot maven 依赖版本 <?xml version="1.0" encoding="UTF-8"?> <project ...

  5. Selenium+2Captcha 自动化+验证码识别实战

    本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解.内容涵盖Selenium的基础知识.验证码的分类.2Captcha服务的使用,以及 ...

  6. Linux文件与目录管理核心命令:看这篇就够了

    Linux文件与目录核心命令 Linux命令操作语法示例 #命令 选项 参数 command [-options] [arguments] [root@localhost ~]# ls //命令 an ...

  7. 零基础入门——从零开始学习PHP反序列化笔记(二)

    魔术方法 魔术方法介绍 __construct() 触发时机:实例化对象之前 构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法; <?php class User { public ...

  8. ROC 曲线与 PR 曲线

    ROC 曲线与 PR 曲线 ROC 曲线与 PR 曲线 ROC 曲线和 PR 曲线是评估机器学习算法性能的两条重要曲线,两者概念比较容易混淆,但是两者的使用场景是不同的.本文主要讲述两种曲线的含义以及 ...

  9. Ceres简单应用-求解(Powell's Function)鲍威尔函数最小值

    Ceres 求解 Powell's function 的最小化 \(\quad\)现在考虑一个稍微复杂一点的例子-鲍威尔函数的最小化. \(\quad{}\) \(x=[x_1,x_2,x_3,x_4 ...

  10. go接收alertmanager告警并发送钉钉

    前言 功能:作为 alertmanager 的 webhook receiver,提取需要的数据转发到钉钉群机器人的webhook web框架:gin alertmanager版本:0.24 系统版本 ...