session、cookie、webstorage的区别

Cookie

Cookie实际上是一小段的文本信息,是服务器发送到用户浏览器并保存在本地的一小块数据。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器下次向同一服务器再发起请求时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

会话 Cookie 和持久 Cookie

  • 会话Cookie:若不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie就消失。这种生命期为浏览器会话期的 Cookie 被称为会话 Cookie。会话Cookie一般不存储在硬盘上而是保存在内存里。

  • 持久Cookie:若设置了过期时间,浏览器就会把 Cookie 保存到硬盘上,关闭后再次打开浏览器,这些 Cookie 仍然有效直到超过设定的过期时间。存储在硬盘上的 Cookie 可以在浏览器的不同进程间共享。

JavaScript设置cookie、读取cookie、删除cookie详解


Session

Session是另一种记录客户状态的机制,不同的是 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。当客户端关闭会话,或者 Session 超时失效时会话结束。用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId,来标识用户的唯一身份。

Session机制

  • 当服务器收到请求需要创建Session对象时,首先会检查客户端请求中是否包含Sessionid。
  • 如果有Sessionid,服务器将根据该id返回对应Session对象;如果客户端请求中没有Sessionid,服务器会创建新的Session对象,并把Sessionid在本次响应中返回给客户端。
  • 通常使用 Cookie 方式存储 Sessionid 到客户端,在交互中浏览器按照规则将Sessionid发送给服务器。
  • 如果用户禁用Cookie,则要使用URL重写,可以通过response.encodeURL(url) 进行实现;当浏览器支持Cookie时,url 不做任何处理;当浏览器不支持Cookie的时候,将会重写 URL 将SessionID拼接到访问地址后。

Web Storage

Web Storage实际上由两部分组成:sessionStorage与localStorage 。

  • sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
  • localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

特点

  • Web Storage根据浏览器的不同,存储容量可以达到5-10M之间;

  • 存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一并发送的服务器,这对于本地存储的数据是一种带宽浪费。而Web Storage中的数据则仅仅是存在本地,不会与服务器发生任何交互。

  • 独立的存储空间:每个域(包括子域)有独立的存储空间,各个存储空间是完全独立的,因此不会造成数据混乱。

  • 只能存储字符串类型,对于复杂的对象可以使用 ECMAScript 提供的 JSON 对象的 stringify 和 parse 来处理


session和cookie的区别

  1. 对象不同
    cookie:是针对每个网站的信息,每个网站只能对应一个,其他网站无法访问,这个文件保存在客户端,每次访问相应网站,浏览器都会查找该网站的 cookies,如果有,则会将该文件发送出去。cookies文件的内容大致上包括了诸如用户名、密码、设置等信息。
    session:是针对每个用户的,只有客户端才能访问,程序为该客户添加一个 session。session中主要保存用户的登录信息、操作信息等等。此 session将在用户访问结束后自动消失(如果也是超时)。

  2. 存储数据大小不同
    cookie:根据国际互联网标准,每个网站可以存储的 Cookie 数量不得超过 300 个,每个 Cookie 的大小不得超过 4096 字节(4 KB)。如果超出了这个限制,浏览器会自动删除旧的 Cookie 以释放空间。
    session:session存储在服务器上可以任意存储数据。当 session存储数据太多时,服务器可选择进行清理。

  3. 生命周期不同
    cookie:cookie的生命周期当浏览器关闭的时候就消亡了,cookie的生命周期是累计的,从创建时就开始计时,30min后cookie生命周期结束。
    session:session的生命周期是间隔的,从创建时开始计时如在30min内没有访问session,那么session生命周期就被销毁。

  4. 存储位置不同
    cookie:cookie数据保存在客户端。
    session:session数据保存在服务器端。

5. 数据类型不同

两者都是key-value结构,但针对value的类型是有差异的。

cookie:value只能是字符串类型。

session:value是object类型。

6. 安全性不同

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session。


Cookie和Web Storage的区别

  1. 存储空间更大
    cookie为4KB,而Web Storage是5-10MB;

  2. 节省网络流量
    Web Storage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样每次请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量;

  3. 敏感访问
    对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据,sessionStorage会非常方便;

  4. 快速显示
    有的数据存储在Web Storage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快;

  5. Web Storage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题;

  6. WebStorage 提供比cookie更方便的数据操作的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 之 参数类型之值类型参数的用法

文章目录 基本数据类型结构体结构体的进一步补充 总结: 当谈论值类型参数时,我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据,而不是引用。 基本数据类型 基本数据类型的值类型参数&…

数据库介绍

一.什么是数据库? 通俗的来讲数据库就是用来存放数据的地方,可以理解为和冰箱一样 官方: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,…

说说Flink双流join

分析&回答 Flink双流JOIN主要分为两大类 一类是基于原生State的Connect算子操作另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。 基于原生State的Connect算子操作 实现原理:底层原理依赖Flink的State状态存储&…

第四课:C++实现压缩包破解密码

这里提供一种基于暴力破解的方法: 安装一个压缩工具,比如WinRAR或7-Zip。 使用C++编写程序,读取需要破解密码的压缩包文件。 利用循环和字符串的特性,生成所有可能的密码组合,并逐个尝试打开压缩包。 如果成功打开,则说明找到了正确的密码,程序停止运行并输出密码。 如果…

11.添加侧边栏,并导入数据

修改CommonAside的代码&#xff1a; <template><div><el-menu default-active"1-4-1" class"el-menu-vertical-demo" open"handleOpen" close"handleClose":collapse"isCollapse"><!--<el-menu-it…

Matlab在编码中增加CRC和交织功能

定义CRC生成和检验的类&#xff08;包括函数&#xff09; 我们在MATLAB中定义一个类&#xff08;class&#xff09;&#xff0c;包含了CRC生成函数和检验函数&#xff08;囊括了常用的CRC多项式&#xff09; classdef CRCpropertiesCRCbit_LenpolynomialCRCgenCRCdetendmetho…

高教社杯数模竞赛特辑论文篇-2012年D题:机器人避障问题(附获奖论文及MATLAB代码实现)

目录 摘要 一、问题重述 二、问题分析 2.1 求取最短路径的分析 2.2 最短时间路径的分析 <

UE5打完包后,启动程序不能全屏

最近看到ue5的打包程序后不能默认自动全屏&#xff0c;效果如下&#xff0c;发现并不是全屏的&#xff0c;而且就算点击放大也不是全屏 解决办法&#xff1a;设置如下之后在打包就可以了 但是会一直打印错误的日志&#xff0c;不过这个不影响使用

JS -RSA 明文加密--用户密码加密

1 配置文件引入 加密包 package.json "jsencrypt": "^3.0.0-rc.1",2 加密公钥配置 import { JSEncrypt } from jsencrypt import request from "/utils/request";const RSA_PUBLIC_KEY "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJVol0cJ…

解决SpringBoot项目war部署到tomcat下无法Nacos中注册服务问题

问题说明 怎么解决Spring Boot项目部署到tomcat下无法Nacos中注册服务问题"&#xff0c;希望能够解决您遇到有关问题。 在使用Nacos作为注册中心的Spring Boot项目&#xff0c;以war包形式部署到服务器上&#xff0c;启动项目发现该服务无法在Nacos中注册。 分析 …

芯片开发之难如何破解?龙智诚邀您前往DR IP-SoC China 2023 Day

2023年9月6日&#xff08;周三&#xff09;&#xff0c;龙智即将亮相D&R IP-SoC China 2023 Day&#xff0c;呈现集成了Perforce与Atlassian产品的芯片开发解决方案&#xff0c;助力企业更好、更快地进行芯片开发。 龙智资深顾问、技术支持部门负责人李培将带来主题演讲—…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第三、四节:几何表述和形状描述

文章目录 一&#xff1a;几何描述&#xff08;1&#xff09;像素间几何关系A&#xff1a;邻接与连通B&#xff1a;距离 &#xff08;2&#xff09;像素间几何特征A&#xff1a;位置B&#xff1a;方向C&#xff1a;尺寸 &#xff08;3&#xff09;程序 二&#xff1a;形状描述&a…

python元组的不可变性和应用场景

Python元组是一种不可变的数据类型&#xff0c;也就是说一旦创建后&#xff0c;其元素无法被修改、添加或删除。元组使用圆括号来表示&#xff0c;元素之间使用逗号进行分隔。 以下是创建和访问元组的方法和语法&#xff1a; 创建元组&#xff1a; 使用圆括号直接创建&#xff…

yolov5自定义模型训练三

经过11个小时cpu训练完如下 在runs/train/expx里存放训练的结果&#xff0c; 测试是否可以检测ok 网上找的这张识别效果不是很好&#xff0c;通过加大训练次数和数据集的话精度可以提升。 训练后的权重也可以用视频源来识别&#xff0c; python detect.py --source 0 # webca…

Fiddler Response私人订制

在客户端接口的测试中&#xff0c;我们经常会需要模拟各种返回状态或者特定的返回值&#xff0c;常见的是用Fiddler模拟各种请求返回值场景&#xff0c;如重定向AutoResponder、请求拦截修改再下发等等。小编在近期的测试中遇到的一些特殊的请求返回模拟的测试场景&#xff0c;…

docker作业

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1.1启动镜像 1.2启动cloud镜像 1.3浏览器访问 ​编辑 2、安装搭建私有仓库 Harbor 2.1下载docker-compose 2.2 磁盘挂载&#xff0c;保存harbor 2.3 修改配置文件 2.4安装 2.5浏览器访问 2.6 新…

MybatisPlus(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处&#xff0c;这篇来深入了解Myb…

代码随想录算法训练营第二十四天|理论基础 77. 组合

理论基础 其实在讲解二叉树的时候&#xff0c;就给大家介绍过回溯&#xff0c;这次正式开启回溯算法&#xff0c;大家可以先看视频&#xff0c;对回溯算法有一个整体的了解。 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇…

Maven之高版本的 lombok 和 tomcat 7 插件冲突问题

高版本的 lombok 和 tomcat 7 插件冲突问题 在开发期间&#xff0c;当我们使用 tomcat7-maven-plugin 来作为运行环境运行我们项目使&#xff0c;如果我们项目中使用了 1.16.20 及以上版本的 lombok 包&#xff0c;项目启动时会报错&#xff1a; for annotations org.apache.…

使用代理服务器和pip安装软件包

在开着代理服务器的情况下&#xff0c;直接pip install 软件包名会出现如下错误&#xff0c; WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by SSLError(SSLZeroReturnError(6, TLS/SSL connection has been…