session 和 cookie 有什么区别

session和cookie是用于记录客户端信息的技术,都是用来跟踪浏览器用户身份的会话方式。

一、什么是 cookie ?

cookie 数据存储在客户端)自带证明自己身份信息的标记 (跨页面间变量传递 :自己携带的一些信息从后台绕一下 请求转发 缓存 到别的页面)

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?

就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证,这样服务器就能从通行证上确认客户身份了。

cookie的工作原理

  1. 浏览器第一次发送请求到服务器端

  2. 服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端

  3. 浏览器端再次访问服务器端时会携带服务器端创建的Cookie

  4. 服务器端通过Cookie中携带的数据区分不同的用户

二、什么是 session ?

session(数据存储在服务端)把服务器端的文件信息存储在硬盘上或是内存中。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

session的工作原理

  1. 浏览器端第一次发送请求到服务器端,服务器端创建一个Session。同时会创建一个特殊的Cookie,然后将该Cookie发送至浏览器端。
    💦特殊的cookie:name为 JSESSIONID 的固定值,value 为 session对象的ID

  2. 浏览器端发送第N(N>1)次请求到服务器端,访问服务器端时携带 name 为 JSESSIONID 的 Cookie对象

  3. 服务器端根据 name 为 JSESSIONID 的 Cookie 对象的 value (即sessionId),去查询 Session对象,从而区分不同用户。

通过原理可以知道:

Session的使用要求用户浏览器必须支持Cookie, 如果浏览器不支持使用Cookie,或者设置为禁用Cookie,那么将不能使用Session。

三、session 和 cookie 区别

1. 数据保存的位置不同
在上面介绍的时候也提到过,cookie是保存在客户端(浏览器或者本地),session保存在服务端。

2. 对服务器造成的压力不同
由于两者数据存储位置的不同,cookie使用起来更加灵活方便。当访问增多时,每个用户都会产生一个Session,占用大量内存,比较耗费服务器的性能。

3. 存储大小不同
单个cookie保存的数据一般小于4kb,并且一般一个站点最多保存20个cookie;而对于session来说没有限制,但是由于session保存在服务器端,session不宜过大,会影响服务器端的性能。

4. 存储内容不同
cookie只能存储String类型字符串对象,而session存储结构类似于hashtable的结构,可以存放任何类型。

5. 安全程度不同
由于cookie保存在客户端,有可能会被人篡改或窃取,它存在一定的安全隐患(一般情况下,浏览器会对cookie进行一些限制,提高cookie的安全性),session是保存在服务器端的所以安全性更高一些,所以我们可以把一些重要信息用session来存储。

6. 有效期不同
cookie可以设置保存时间,会在有效期内一直保存;而session是会话级别的,会话结束,session也相应被清除

7. 跨域支持上的不同
Cookie支持跨域名访问,而Session则不会支持跨域名访问,Session仅在他所在的域名内有效。

 

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

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

相关文章

ansible配置文件案例

案例一 控制主机上的普通用户控制受控主机 控制端1台,受控端两台 1.将两台受控主机添加到/etc/hosts文件中 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhos…

Qt5.13引入QtWebApp的模块后报错: error C2440: “reinterpret_cast”: 无法从“int”转换为“quintptr”

1、开发环境 Win10-64 qt5.13 msvc2015-64bit-release 2、报错 新建一个demo工程。 引入QtWebApp的httpserver、logging、templateengine三个模块后。 直接运行,,此时报错如下: E:\Qt5.13.1\install\5.13.1\msvc2015_64\include\QtCore…

Java 8 中使用 Stream 遍历树形结构

在实际开发中,我们经常会开发菜单,树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看&#x…

GEE:矢量数据去除重复值(输出样本点数据的标签信息)

作者:CSDN @ _养乐多_ 本文记录了在GoogleEarthEngine(GEE)平台上,将样本点数据中某个字段的值去除重复值,并将剩下的值打印到控制台的代码。该代码可以用于快速在GEE平台上查询土地利用分类信息中landcover的类别信息。 矢量数据信息如下所示, 打印结果如下所示, 文章…

QT-QTableWidget设置单元项图标和图标大小

要设置 QIcon 的大小,你可以使用 QPixmap 来加载原始图像,并调用 QPixmap 的 scaled() 函数来缩放图像的尺寸。然后,将缩放后的 QPixmap 设置给 QIcon,最后将 QIcon 设置给 QTableWidgetItem 的图标。 下面是一个示例代码&#x…

Flask-SocketIO

一、简介: Flask-SocketIO使Flask应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C、Java和Swift中的任何SocketIO客户端库或任何其他兼容客户端来建立与服务器的永久连接。 二、安装: pip instal…

GPS北斗卫星时钟服务器如何在各领域发挥作用

GPS北斗卫星时钟服务器如何在各领域发挥作用 GPS北斗卫星时钟服务器如何在各领域发挥作用 1.通信与网络:时钟服务器可用于确保通信网络中的各个设备具有高度精确的时间同步。这对于数据通信、日志记录、安全认证等方面至关重要。 2.金融交易:在金融行业…

基于weka手工实现ID3决策树

一、决策树ID3算法 相比于logistic回归、BP网络、支持向量机等基于超平面的方法,决策树更像一种算法,里面的数学原理并不是很多,较好理解。 决策树就是一个不断地属性选择、属性划分地过程,直到满足某一情况就停止划分。 当前样…

【TypeScript】类型断言的基本使用

类型断言的概念 有些时候开发者比TS本身更清楚当前的类型是什么&#xff0c;可以使用断言&#xff08;as&#xff09;让类型更加精确和具体。 类型断言&#xff08;Type Assertion&#xff09;表示可以用来手动指定一个值的类型。 类型断言语法&#xff1a; 值 as 类型 或 <…

Springboot整合activiti5,达梦数据库,mybatis中间件

Springboot整合activiti5&#xff0c;达梦数据库&#xff0c;mybatis中间件 问题现象解决方案 问题现象 由于工作流引擎不支持达梦数据库以及国产中间件&#xff0c;所以我们引入的时候会报错&#xff0c;这个时候就需要去改造代码和配置文件。各种文档和资料查找一天&#xf…

4.2的幂次方表示

【题目】 任何一个正整数都可以用2进制表示&#xff0c;例如&#xff1a;137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式&#xff0c;令次幂高的排在前面&#xff0c;可得到如下表达式&#xff1a;137 2^7 2^3 2^0 现在约定幂次用括号来表示&#xff0…

Kafka3.0.0版本——生产者如何提高吞吐量

目录 一、生产者提高吞吐量参数设置二、产者提高吞吐量代码示例 一、生产者提高吞吐量参数设置 batch.size&#xff1a;设置批次大小&#xff0c;默认16klinger.ms&#xff1a;设置等待时间&#xff0c;修改为5-100msbuffer.memory&#xff1a;设置缓冲区大小&#xff0c; 默认…

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…

升级mybatis-plus到3.5.3.1和JSQLParser 从4.3升级到4.6版本引起的插入问题解决

由于项目组件升级&#xff0c;所以需要升级mybatis-plus到3.5.3.1和JSQLParser 从4.3升级到4.6版本&#xff0c;但发现用标准的插入也会报错&#xff0c;如下&#xff1a; ### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Erro…

tomcat限制IP访问

tomcat可以通过增加配置&#xff0c;来对来源ip进行限制&#xff0c;即只允许某些ip访问或禁止某些来源ip访问。 配置路径&#xff1a;server.xml 文件下 标签下。与同级 <Valve className"org.apache.catalina.valves.RemoteAddrValve" allow"192.168.x.x&…

python练习10-8,10-9

10-8 def count_words(filename):try:with open(filename) as f:cf.read()except FileNotFoundError:print(f"Sorry,the file {filename} did not exist.")else:print(c)filenames[cats.txt,dogs.txt] for filename in filenames:filename.hanshu() #记错了在类中…

特斯拉墨西哥工厂风波:2.5万美金的车型何时开造?

作者 | Amy 编辑 | 德新 去年10月&#xff0c;马斯克闪现墨西哥新莱昂州&#xff0c;会见了当地官员。考虑到新莱昂州是通用和现代工厂所在地&#xff0c;特斯拉第五大工厂花落墨西哥的消息不胫而走。 今年3月&#xff0c;特斯拉正式宣布&#xff0c;将在墨西哥北部新莱昂州的…

C++(15):面向对象程序设计

面向对象程序设计概述 面向对象程序设计&#xff08;object-oriented programming&#xff09;的核心思想是数据抽象、继承和动态绑定。 1.使用数据抽象&#xff0c;可以将类的接口与实现分离&#xff1b; 2.使用继承&#xff0c;可以定义相似的类型并对其相似关系建模&#x…

嵌入式:C高级 Day2

一、递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 二、递归实现&#xff0c;输入一个数字&#xff0c;输出这个数的二进制 三、写一个脚本&#xff0c;包含以下内容 1.显示/etc/group文件中第五行的内容 2.创建目录/home/ubuntu/copy 3.切换工作路径到此目录…

多雷达探测论文阅读笔记:雷达学报 2023, 多雷达协同探测技术研究进展:认知跟踪与资源调度算法

多雷达协同探测技术 原始笔记链接:https://mp.weixin.qq.com/s?__biz=Mzg4MjgxMjgyMg==&mid=2247486627&idx=1&sn=f32c31bfea98b85f2105254a4e64d210&chksm=cf51be5af826374c706f3c9dcd5392e0ed2a5fb31ab20924b7dd38e1b1ae32abe9a48afa8174#rd ↑ \uparrow …