Cookie 和 Session 的工作流程总结

HTTP协议自身属于"无状态"协议,默认情况下HTTP协议的客户端和服务器之间的这次通信和下次通信没有直接的联系.
而在实际的开发中,我们是需要知道请求之间的关系和联系的.例如登录网站后,第二次访问的时候就知道该请求是否已经登录过了.
Cookie和Session的主要目的就是为了弥补HTTP的无状态特性.

基本概念

cookie

  • Cookie是HTTP协议中的一个字段,同时也是浏览器在客户端这边保存数据的一种比较古老的一种方式.
  • Cookie是服务器产生的,通过HTTP响应的Set-Cookie字段来进行设置返回给浏览器的。Cookie在浏览器这边存储,浏览器会根据域名/地址来分别存储Cookie,并与下一个请求一起发送到服务器,通常,它用于判断两个请求是否来自同一用户,来决定返回什么样的页面。比如不同用户的购物车,游戏得分信息都是不一样的.
  • Cookie存的是键值对结构的字符串,此处的键值对都是程序员自定义的.
  • 注:Cookie是浏览器这边存储的机制.

Session

像我们去医院看病的时候需要先挂号,挂号的时候会有一张就诊卡,这个就诊卡就相当于患者的"令牌",后续在医院进行一系列开药拍片等操作只需就诊卡就可得出患者的身份信息等一系列信息.
此时在服务器这边就要记录令牌信息,以及令牌对应的用户信息,这故事就是Session机制所做的工作.

服务器同一时刻收到的请求是很多的,而且还需要清楚地区分出不同的请求是从属于哪个用户,就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系;在上面的例子中,就诊卡就是一张 “令牌”。要想让这个令牌能够生效,就需要医院这边通过系统记录每个就诊卡和患者信息之间的关联关系。

  • Session本质就是一个"哈希表",存储了一些键值对结构.Key就是令牌的ID(token/sessionId),value就是用户信息(可灵活设计).
  • sessionId 是由服务器生成的一个 “唯一性字符串”,从 session机制的角度来看,这个唯一性字符串称为 “sessionId”。但是站在整个登录流程中看待,也可以把这个唯一性字符串称为 “token”.
  • sessionId和token可以理解成是同一个东西的不同叫法.(不同视角的叫法)
  • 当用户登录的时候,服务器在Session中新增一个记录,并把 sessionId / token 通过Set-Cookie字段返回给客户端.
  • 客户端后续再给服务器发送请求的时候,需要在请求中带上 sessionId/ token(例如通过HTTP请求中的 Cookie 字段带上).
  • 服务器收到请求之后,根据请求中的sessionId / token在 Session信息中获取到对应的用户信息后再进行后续操作
  • Servlet 的Session默认是保存在内存中的,如果重启服务器则Session数据就会丢失.
  • 注:Session是在服务器这边储存的机制.

联系

  • Cookie和Session之间往往相互配合而不是非得配合.
  • Cookie是客户端机制,Session是服务器端的机制.
  • 完全可以用Cookie来保存一些数据在客户端,这些数据不一定是用户身份信息,也不一定是token / sessionId
  • Session中的 token / sessionId 也不需要非得通过 Cookie / Set-Cookie 传递…

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch从入门到精通(二)

ElasticSearch 高级操作 bulk批量操作 批量操作-脚本 #批量操作 #1.删除5号 #新增8号 #更新2号 name为2号 POST _bulk {"delete":{"_index":"person1","_id":"5"}} {"create":{"_index":"person…

Android 10.0 系统开启和关闭黑白模式主题功能实现

1. 概述 在10.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…

docker下redis备份文件dump.rdb获取

1.查看镜像 docker ps -a 2.进入redis客户端 docker exec -it redis redis-cli 3.保存备份文件 save 4.查看文件存放位置 CONFIG GET dir 5.将docker中文件拷出 docker cp id或name:容器中文件的路径 目标目录地址

研究铜互连的规模能扩大到什么程度

随着领先的芯片制造商继续将finFET以及很快的纳米片晶体管缩小到越来越小的间距,使用铜及其衬垫和阻挡金属,较小的金属线将变得难以维持。接下来会发生什么以及何时发生,仍有待确定。 自从IBM在20世纪90年代向业界引入采用双镶嵌工艺的铜互连…

一文教你彻底理解什么是协程!

作为程序员,想必你多多少少听过协程这个词,这项技术近年来越来越多的出现在程序员的视野当中,尤其高性能高并发领域。当你的同学、同事提到协程时如果你的大脑一片空白,对其毫无概念。。。 那么这篇文章正是为你量身打造的。话不…

flink集群与资源@k8s源码分析-回顾

本章是分析系列最后一章,作为回顾,以运行架构图串联起所有分析场景 1 启动集群,部署集群(提交k8s),新建作业管理器组件 2 构建和启动flink master组件 3 提交作业,N/A

性能测试分析调优必备的java虚拟机知识

Java虚拟机 Java虚拟机(Java Virtual Machine,简称JVM)是一种用于执行Java字节码的虚拟计算机。它是Java平台的关键组成部分,负责将Java源代码编译为可在不同计算机体系结构上执行的字节码。 JVM起到了中间层的作用&#xff0c…

IP转地理位置:探讨技术与应用

IP地址是互联网上设备的唯一标识符,而将IP地址转换为地理位置信息是网络管理、安全监控和市场定位等领域中的一项重要任务。本文将深入探讨IP转地理位置的技术原理和各种应用场景。 IP地址与地理位置 IP地址(Internet Protocol Address)是一…

面试官:你了解axios的原理吗?有看过它的源码吗?

面试官:你了解axios的原理吗?有看过它的源码吗? 一、axios的基本使用 关于 axios 的基本使用,上篇文章已经有所涉及,这里再稍微回顾一下: 发送请求 import axios from axios;axios(config) // 直接传入…

一百八十六、大数据离线数仓完整流程——步骤五、在Hive的DWS层建动态分区表并动态加载数据

一、目的 经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 二、数仓实施步骤 (五)步骤五、在Hive的…

《从菜鸟到大师之路 MySQL 篇》

《从菜鸟到大师之路 MySQL 篇》 数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统。 DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 实现读取自动化需要编程…

docker安装使用xdebug

docker安装使用xdebug 1、需要先安装PHP xdebug扩展 1.1 到https://pecl.php.net/package/xdebug下载tgz文件,下载当前最新稳定版本的文件。然后把这个tgz文件放到php/extensions目录下,记得install.sh中要替换解压的文件名: installExtensio…

Vue 组件开发总结

Vue 组件开发思路 1. 组件划分 首先,你需要明确定义组件的划分。将大型界面划分为小型、可重用的组件是一个关键步骤。这有助于提高代码的可维护性和可复用性。 2. 组件设计 在设计组件时,考虑组件的输入(props)和输出&#xf…

数据库常用指令

检查Linux系统是否已经安装了MySQL: sudo service mysql start

手把手教你使用PLSQL远程连接Oracle数据库【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

浅谈智能照明控制系统在体育馆中的应用

【摘要】在社会经济日益发展的今天,人们的物质文化水平都有着不同程度上的提高。与此同时人们更加追求高质量的工作和生活环境。照明在现代化的多功能体育场馆中是非常重要的一个环节。智能化的照明控制系统能够根据环境的变化以及客户的需求等条件来自动调节照明系…

数据中心市场现状及发展趋势分析

随着数字化转型的加速,数据中心在中国的市场需求日益增长。本文将分析2023年中国数据中心市场的现状,并探讨其未来发展趋势。 一、2023年中国数据中心市场现状 市场规模:2023年中国数据中心市场的规模已经相当庞大,达到了数百亿美…

Bigemap如何查看历史影像

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人都在寻找历史影像图,这块的需求是非常大,历史影像一般可以用于历史地貌的变迁分析,还原以前的生态场景,对范围面积…

由于找不到MSVCP140.dll,无法继续执行代码,重新安装程序可能会解决此问题的”修复方案

在Windows操作系统中,msvcp140.dll是一个非常重要的动态链接库文件,它是Microsoft Visual C 2015 Redistributable的一部分。这个文件主要用于支持许多应用程序的正常运行,例如Microsoft Office、SQL Server等。当计算机上缺少msvcp140.dll文…

Django(21):使用Celery任务框架

目录 Celery介绍Celery安装Celery使用项目文件和配置启动Celery编写任务调用异步任务查看任务执行状态及结果 设置定时和周期性任务配置文件添加任务Django Admin添加周期性任务启动任务调度器beat Flower监控任务执行状态Celery高级用法与注意事项给任务设置最大重试次数不同任…