Cookie vs Session:Web开发中的身份验证之争

Cookie vs Session:Web开发中的身份验证之争

  • 前言
  • 一、概述
  • 二、Cookie和Session的区别与联系
  • 三、登陆案例讲解
    • 1、以登录案例讲解Cookie的使用过程
    • 2、以登陆案例讲解 Session 的使用过程
  • 四、总结



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、概述

当涉及到Web开发和用户身份验证时,Cookie和Session是两个常见的概念。它们在存储和管理用户状态方面起着重要作用。、

二、Cookie和Session的区别与联系

Cookie和Session是Web开发中常用的机制,用于存储和管理用户的身份验证和状态信息。它们之间的主要区别如下:

  1. 存储位置:

    • Cookie:Cookie是存储在用户的浏览器中的小段数据。每个Cookie都有一个名称和值,并且由服务器发送给浏览器,在用户的每个请求中被浏览器自动包含在HTTP头中。
    • Session:Session是存储在服务器端的数据结构。服务器为每个用户创建一个唯一的会话,并将会话ID存储在Cookie中或通过URL参数传递给客户端。会话数据存储在服务器的内存或持久化存储中。
  2. 存储容量:

    • Cookie:每个域名下的Cookie数量和总大小都是有限制的。通常,每个域名最多可以存储几十个Cookie,每个Cookie的大小不能超过几KB。
    • Session:在服务器端存储Session数据的容量通常较大,可以存储更多的信息,受服务器资源和配置的限制。
  3. 安全性:

    • Cookie:Cookie可以设置安全标志(secure flag)和HTTP-only标志(HTTP-only flag)来增加安全性。安全标志可以确保Cookie仅在使用加密协议(如HTTPS)时传输,而HTTP-only标志可以防止JavaScript访问Cookie,从而减少跨站点脚本攻击(XSS)的风险。
    • Session:由于Session数据存储在服务器端,相对于Cookie,Session更难受到客户端篡改和攻击。
  4. 时效性:

    • Cookie:Cookie可以设置一个过期时间,在此之前浏览器会持续保存它,并在用户下次访问网站时发送回服务器。可以创建持久性Cookie(有过期时间)和会话Cookie(在用户关闭浏览器后过期)。
    • Session:Session可以有一个过期时间,或者在用户关闭浏览器时自动销毁。会话Cookie通常用于存储会话ID,而不是实际的会话数据。
  5. 跨设备支持:

    • Cookie:Cookie存储在用户的浏览器中,因此可以在不同设备上使用同一浏览器时共享。可以通过在浏览器中同步Cookie来实现跨设备的状态共享。
    • Session:Session数据存储在服务器端,与设备无关。无论用户使用哪个设备访问网站,服务器都可以通过会话ID来检索和管理用户的会话数据。

需要注意的是,Cookie和Session通常一起使用,通过Cookie中的唯一标识符来关联和管理服务器端的Session数据。Cookie提供了一种持久性存储和跨设备共享的方式,而Session提供了在服务器端存储和管理用户状态的机制。理解Cookie和Session的区别对于开发安全和可靠的Web应用程序至关重要。

三、登陆案例讲解

1、以登录案例讲解Cookie的使用过程

  1. 首先用户在客户端浏览器向服务器首次发起登陆请求
  2. 登陆成功后,服务端会把登陆的用户信息设置在cookie中(即set-cookie),并将cookie返回给客户端浏览器
  3. 客户端浏览器接收到 cookie 请求后,会把 cookie 保存到本地(可能是内存,也可能是磁盘,看具体使用情况而定)
  4. 以后再次访问该 web 应用时,客户端浏览器就会把本地的 cookie 带上,这样服务端就能根据 cookie 获得用户信息了

弊端:服务端把用户信息(用户名、用户密码)设置在cookie里返回给客户端,让客户端自己保存,也就是用户可以在客户端看到自己的密码。如果你的电脑被盗了,别人也可以在cookie里看到你的用户名和密码,这存在着极大的信息泄露安全风险!!
因此,引进了session登录

2、以登陆案例讲解 Session 的使用过程

  1. 首先用户在客户端浏览器发起登陆请求。
  2. 登陆成功后,服务端会把用户信息保存在服务端,并返回一个唯一的 session 标识(即sessionID)通过设置在cookie里返回给客户端浏览器
  3. 客户端浏览器会把这个唯一的session 标识保存在起来
  4. 以后再次访问 web 应用时,客户端浏览器会把这个唯一的 session 标识带上,这样服务端就能根据这个唯一标识找到用户信息。

看到这里可能会引起疑问:把唯一的 session 标识返回给客户端浏览器,然后保存起来,以后访问时带上,这难道不是 cookie 吗?

没错,session 只是一种会话机制,在许多 web 应用中,session 机制就是通过 cookie 来实现的。也就是说它只是使用(利用)了cookie 的功能,并不是使用 cookie完成会话保存。与 cookie 在保存客户端保存会话的机制相反,session 通过cookie的功能把会话信息保存到了服务端。

四、总结

举个小例子说明Cookie和Session之间的区别和联系
假如一个咖啡店有喝五杯赠一杯咖啡的优惠,但是一次性消费5杯咖啡的客人很少,这时就需要某种方式来记录某位顾客的消费数量。无外乎下面的几种方案

  1. 该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。但是http协议本身是无状态的。
  2. 发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态,也就是cookie,顾客就相当于浏览器,也就是Cookie登录。
  3. 发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的记录本上找到这个卡号对应的记录添加一些消费信息。这种做法就是在服务器端保持状态,也就是Session登录。

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

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

相关文章

尚硅谷大数据项目《在线教育之采集系统》笔记004

视频地址:尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P047 P048 P049 P050 P051 P052 P053 P054 P055 P056 P047 /opt/module/datax/job/base_province.json [atguigunode001 ~]$ hadoop fs -mkdir /base_province/2022-02-22 [atgu…

前端大屏自适应缩放

简介 前端中大屏往往用于展示各种炫酷的界面和特效,因此特别受用好欢迎。 但是在开发过程中,常常也会出现各种问题,与一般的页面相比, 最让人头疼的是大屏的自适应问题。使用CSS中transform属性和js获取缩放比例方法 先简单写一下…

工厂方法模式-java实现

介绍 工厂方法模式,通过把工厂抽象为一个接口,这样当我们新增具体产品的时候,就只需要实现一个新的具体工厂类即可。一个具体工厂类,对应着一个产品。 请注意:在工厂方法模式中,一个具体工厂类只对应生产…

常微分方程建模R包ecode(三)——探寻平衡点

在建立常微分方程后,我们常常会问的一个问题是: 这个常微分方程系统中是否存在平衡点?如果存在,这个平衡点是否稳定? 本节将展示如何通过ecode包来回答这个问题。 我们首先利用ecode包建立一个Lotka–Volterra竞争模型…

活动发布会邀请媒体6步走

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请媒体参加活动发布会对信息的传播,企业品牌建设有诸多的好处,今天就与大家分享下邀请媒体参加活动报道的6个步骤: 1. 策划与准备: -明…

【Flutter】【packages】simple_animations 简单的实现动画

package:simple_animations 导入包到项目中去 可以实现简单的动画, 快速实现,不需要自己过多的设置 有多种样式可以实现[ ] 功能: 简单的用例:具体需要详细可以去 pub 链接地址 1. PlayAnimationBuilder PlayAnima…

java多线程及

多线程使用 在java中,多线程得主要实现方式有四种:继承Thread类,实现Runnable接口、实现callable接口通过FutureTask包装器来创建Thread线程,使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执…

勘探开发人工智能应用:人工智能概述

0 提纲 机器学习、深度学习、计算机视觉等技术已在勘探开发、油气生产、炼油炼化、经营管理等重点环节进行应用与推广。请思考: 输入:数据是什么(数字、文本、图)?如何理解数据?如何清洗数据?(需要专业领域知识)输出&…

实习碎碎念

话说实习一周多了,学到的比自学一个月都多~~~加油狗子你最棒!!! 环境搭建坑死了 SSM框架环境配置 Ideamavenjdktomcatnavicat https://www.cnblogs.com/seigann/p/14528551.htmlhttps://www.cnblogs.com/seigann/p/14528551.h…

模板初阶以及string类使用

模板初阶以及string类使用 模板的简单认识1.泛型编程2.函数模板模板的原理图函数模板格式函数模板实例化非模板函数和模板函数的匹配原则 3.类模板类模板的定义格式类模板的实例化 string1.string简介2.string常用的接口 题目练习1.字符串相加2.字符串里面最后一个单词的长度3.…

【瑞吉外卖】Git部分学习

Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库…

CVE漏洞复现-CVE-2021-3493 Linux 提权内核漏洞

CVE-2021-3493 Linux 提权内核漏洞 漏洞描述 CVE-2021-3493 用户漏洞是 Linux 内核中没有文件系统中的 layfs 中的 Ubuntu over 特定问题,在 Ubuntu 中正确验证有关名称空间文件系统的应用程序。buntu 内核代码允许低权限用户在使用 unshare() 函数创建的用户命名…

kubernetes configmap 的data中的文件内容格式错乱

截取一段错乱的配置: kubectl -n monitoring get cm blackbox-exporter-configuration -o yaml apiVersion: v1 data:config.yml: "\"modules\":\n \"http_2xx\":\n \"http\":\n \"preferred_ip_protocol\"…

线上电影购票选座H5小程序源码开发

搭建一个线上电影购票选座H5小程序源码需要一些基本的技术和步骤。以下是一个大致的搭建过程,可以参考: 1. 确定需求和功能:首先要明确你想要的电影购票选座H5小程序的需求和功能,例如用户登录注册、电影列表展示、选座购票、订单…

【Java可执行命令】(二十一)线程快照生成工具 jstack:帮助开发人员分析和排查线程相关问题(死锁、死循环、线程阻塞...)

Java可执行命令之jstack 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 使用步骤及技巧3.3 使用案例 4️⃣ 应用场景🌾 总结 1️⃣ 概念 jstack 命令是 Java Development Kit(JDK)中提供的一项诊断工具,用于生成Java虚拟…

WHQL认证中HCK和HLK的区别

开发者或硬件制造商要通过WHQL认证获得微软数字签名或是Windows徽标的使用权限,就需要使用WHQL认证的测试工具(HCK或HLK)对硬件设备或驱动程序进行测试。HCK和HLK其实是一个系列的测试工具,HCK和HLK的主要区别是用于测试不同Windo…

pytest测试框架之fixture测试夹具详解

fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown,但相对之下它的功能更加强大和灵活。 命名方式灵活,不限于unittest的setup、teardown可以实现数据共享,多个模块跨文件共享前置后置可以实现多个模块跨…

JAVA SpringBoot 项目 多线程、线程池的使用。

1.1 线程: 线程就是进程中的单个顺序控制流,也可以理解成是一条执行路径 单线程:一个进程中包含一个顺序控制流(一条执行路径) 多线程:一个进程中包含多个顺序控制流(多条执行路径&#xff0…

前端实习周记第三周周记

第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多,但是小的细节蛮多。 值得一提的是,第二周做的微信小程序,改了很多逻辑。改逻辑需要与后端进行联调,收获很大,思路也愈发清楚。 记录做了什么是好习…