服务端的 Session 详解

news2024/11/19 18:40:30

0x01:Session 简介

Session 是在 Cookie 的基础上发展的,其主要功能和 Cookie 一样,都是为了解决 HTTP 无状态的痛点,和 Cookie 不同的是,它是将大部分数据存储在了服务端,而只给用户一个 SESSID,解决了 Cookie 存放在客户端造成的两大问题:

  1. 占用客户端过大的存储空间。 -> 浏览器在客户端存放的 Cookie 过大。

  2. 增加 HTTP 通信的成本。 -> 客户端每次请求都要带上大量 Cookie。

就安全而言,其实还解决了 Cookie 可以在本地修改的问题(Cookie 放在服务端,你怎么改?)。不过伴随而来的也有缺点,Session 会消耗服务端的存储资源(不过一个文件都很小,可以忽略)。

0x02:Session 的工作原理

0x0201:Session 的工作原理 — 理论篇

  1. 创建 Session: 当用户首次访问网站时,服务器会为该用户创建一个唯一的 Session ID,并将其通过 Cookie(或其他机制,如 URL 重写)发送给用户的浏览。这个 Session ID 是服务器用来识别不同用户会话的关键。

  2. 存储 Session 数据: 服务器会在其内存中(如数据库、文件系统等持久化存储中,取决于具体实现)为该 Session ID 关联一个存储空间,用于存储该用户会话期间的所有数据。

  3. 会话管理: 在用户与服务器进行后续交互时,浏览器会自动将 Session ID 包含在请求头中发送给服务器。服务器通过解析这个 Session ID,就可以从对应的存储空间中检索出用户的会话数据,从而实现状态的持续跟踪。

  4. Session 超时与销毁: 为了安全起见,Session 通常会有一个超时时间限制。如果用户一定时间内没有与服务器进行任何交互,Session 就会被视为过期并被销毁,相应的存储空间也会被释放。此外,用户也可以主动注销登录,此时服务器也会销毁对应的 Session。

0x0202:Session 的工作原理 — 实验篇

实验工具准备

  • PHP 运行环境:phpstudy_x64_8.1.1.3.zip(Apache2.4.39 + PHP 5.3.29nts)

  • Session 实验源码包(附配置流程):SessionLab01.zip

实验环境的搭建流程我一起放在了 SessionLab01.zip 中了,这里就不多说了,下面直接开始实验。

首先,访问实验环境,并打开 ”开发者工具“ 进行抓包:

可以看到,一进入站点,服务端就给我们分配了一个 SESSID 并通过 Cookie 发送到了我们的浏览器上。

接下来,我们尝试进行登录,看看发送的请求包会发生什么变化:

可以看到,页面成功跳转到了登录成功的样式。但是发送给服务端的 Cookie 中依旧只存在一个 PHPSESSID 字段。在前面的理论篇中,我们了解到,Session 的值是存储在服务端的,接下来我们去服务端看看这个存储 Session 的文件。

服务端,即提供服务的终端嘛,在上面的实验中,我们访问的是 127.0.0.1 这个服务端,说白了,就是本机(本次实验是在主机上通过 PhpStudy 中的 Apache 服务运行的)。

从上面的实验中得知服务端分配给我们的 Session ID 是 ujaf4rqfopkoi4i6e08s04skk5 ,我们利用 EveryThing(一款本地资源搜索工具) 这款工具搜索一下:

可以看到,服务端果然存储了这么一个 Session 文件,该 Session 文件中保存了用户传递过来的登录信息。

接下来我们使用相同的浏览器打开一个新页面,并重新访问实验环境:

可以发现,服务端依旧认为我们处于登录状态,且我们发送给服务端的依旧只是 SessionID。

至此,我们已经见识到了创建 Session存储 Session会话管理,这几个部分。在销毁 Session 前,再做一个小实验:

我们用一个新的浏览器,打开实验环境,因为浏览器之间 Cookie 是不通的,所以服务端肯定认为我们未登录,如下(Chrome 浏览器):

这个时候我们打开 ”开发者工具“,并将之前获得的 Session ID 手动添加进去:

刷新页面,可以看到,原本未登录的浏览器,其状态也变成了登录:

OK,这个小实验完成了,算是一个引子吧( XSS 攻击 了解一下)。

最后是销毁 Session,点击一下页面中的 ”Destruction Of Account" 即可:

可以看到,两个客户端都显示了退出登录的状态。

0x03:关于 Session 的几个知识点

0x0301:Session 和 Cookie 工作流程对比:

Cookie:当用户访问目标服务器时,每次的访问都会带上usernamepassword,表明自己是已经登录过的用户,而且随着操作的变多,Cookie 的字段可能会越来越长,导致 HTTP 通信成本和本地存储空间都增大。

Session:用户第一次登录时,服务器会给用户分配一个随机的 SESSID,后面用户只要拿着这个 SESSID,服务器就可以知道你是谁,你做了什么,而且随着操作变多,数据都是存放在服务器那边,你本地保存的依旧只是那短短的一个 SESSID。

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

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

相关文章

django学习入门系列之第十点《A 案例: 员工管理系统21》

文章目录 16 Ajax(订单案例)16.9 编辑想要去数据库中获取数据时:对象/字典将具体内容的错误信息传入到前端(Ajax)将数据库数据传入前端(Ajax)清空新建订单的数据 16.10 编辑后保存 往期回顾 16 Ajax(订单案例) 16.9 编辑 点击编辑…

TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测

TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测 目录 TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料预测效果

Python第一篇:Python解释器

一:python解释器 python解释器是一款程序,用于解释、执行Python源代码。 一般python解释器都是c python使用c编写的,还有j python用java编写的。 二:python下载 三:使用示例 python进入控制台,python。 三…

【react案例】实现评论列表

1. 需求 展示评论列表实现删除功能 2.1 只有自己的评论才展示删除按钮 2.2 点击删除按钮,删除当前评论tab切换(点击对应tab,对tab文案高亮处理)评论高亮评论排序(最新、最热) 2. 实现思路 useState维护评…

基于vue框架的大同传统文化非物质文化宣传管理系统jzo9d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,非遗类型,文化遗产 开题报告内容 基于Vue框架的大同传统文化非物质文化宣传管理系统开题报告 一、研究背景 在全球化加速的今天,传统文化的保护与传承面临着前所未有的挑战。大同,作为中国历史文化名城&a…

职场能力强的人都在做什么---今日头条

【职场里,能力强的人都在做哪些事... - 今日头条】https://m.toutiao.com/is/ikn6kt9q/ 知识雷达 2024-09-21 16:33 目录 职场里,能力强的人都在做哪些事呢? 1、复盘; 2、多角度思考;3、记录信息; 4、永远积极主动;5、主动获取信息差; 6、明确人和人的关系;7、…

STM32杂项

STM32杂项 1.启动过程2.中断3.GPIO4.Systick5.串口printf6.独立看门狗 记录单片机在工作中遇到的问题和特殊情况。 1.启动过程 M3/M4/M7内核复位后,做的第一件事: 1.从地址0x0000 0000处取出堆栈指针MSP的初始值,该值就是栈顶地址。 2.从地址…

2024必备中英互译利器全知道

现在英语目前还是学习最广泛的第二语言,所以很多资料都有英文的版本。如果外语不好,那中英互译翻译工具就能帮我们解决这个问题。今天我们一起来探讨下有哪些好用的翻译工具。 1.福昕在线翻译 链接直达>>https://fanyi.pdf365.cn/doc 这个工具…

【linux】进度条

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.屏幕缓冲区换行(LF, \n)和回车(CR, \r)换行回车在屏幕缓冲区中的作用代码块1:代码块2: 02.进度条优化版…

SpringBoot3+Swagger3(最新版springdoc-openapi教程)

第一步&#xff1a;引入springdoc-openapi依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version></dependency> 第二步&#xff1a; 配置…

打开ffmpeg编码器的时候报错:avcodec_open2()返回-22

[h264_v4l2m2m 0x555555617a00] Could not find a valid device [h264_v4l2m2m 0x555555617a00] cant configure encoder 前言&#xff1a;先做一个操作&#xff0c;查找编码器的时候&#xff0c;使用名字查找的方式&#xff1a; const AVCodec *avcodec_find_encoder_by_n…

ubuntu数据硬盘故障导致系统启动失败

背景&#xff1a; 系统盘损坏或者/etc/fatab误修改导致开机启动挂载失败系统无法启动 解决方法 重启

BFS 解决最短路径问题, 迷宫中离入口最近的出口,最小基因变化,单词接龙,为高尔夫比赛砍树

文章目录 1926. 迷宫中离入口最近的出口433. 最小基因变化127. 单词接龙675. 为高尔夫比赛砍树 1926. 迷宫中离入口最近的出口 边权为1的最短路径问题 我们要知道上下左右都是可以走的 &#xff08;用队列&#xff09;走过的地方不要在走了&#xff0c;这样会进入死循环&#x…

零信任内网安全访问

随着互联网的持续发展&#xff0c;便捷的共享方式极大地提高了企业的生产力和工作效率&#xff0c;但随之也给企业内网带来了极大的安全隐患。企业内网承载大量的核心资产和机密数据&#xff0c;一旦受到攻击可能会造成大量损失&#xff0c;因此&#xff0c;如何通过零信任内网…

快手一面:给定一棵二叉树,要求将其转换为其镜像?

目录标题 题解&#xff1a;二叉树的镜像&#xff08;Invert Binary Tree&#xff09;问题描述示例解题思路代码实现详细分析复杂度分析优点注意事项&#x1f495; 题解&#xff1a;二叉树的镜像&#xff08;Invert Binary Tree&#xff09; 问题描述 给定一棵二叉树&#xff…

探索AI新纪元:揭秘Mammoth库的神秘面纱

文章目录 探索AI新纪元&#xff1a;揭秘Mammoth库的神秘面纱背景&#xff1a;为何选择Mammoth&#xff1f;简介&#xff1a;Mammoth是什么&#xff1f;安装&#xff1a;如何获取Mammoth&#xff1f;使用&#xff1a;Mammoth的基本函数场景应用&#xff1a;Mammoth在实际中的运用…

基于Python大数据的B站热门视频的数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

宠物空气净化器和普通的空气净化器有区别吗?哪款能吸猫毛

这不是国庆节要来了吗&#xff0c;想着假期变多了可以多陪一下自家的小猫咪&#xff0c;但是也怕猫咪的毛发太多让我产生退缩的念头。 刚开始养的时候&#xff0c;我就知道猫咪是会掉毛的&#xff0c;毕竟猫咪的毛发这么旺盛&#xff0c;掉毛也是正常的&#xff0c;但是我似乎…

SpringCloud源码:客户端分析(二)- 客户端源码分析

背景 我们继续分析EurekaClient的两个自动化配置类&#xff1a; 自动化配置类功能职责EurekaClientAutoConfiguration配置EurekaClient确保了Eureka客户端能够正确地&#xff1a;- 注册到Eureka服务端- 周期性地发送心跳信息来更新服务租约- 下线时通知Eureka服务端- 获取服务实…

Qt网络编程——QUdpSocket

文章目录 Qt网络编程QUdpSocketUdp回显服务器Udp客户端 Qt网络编程 网络编程本质上是写应用层代码&#xff0c;需要传输层提供支持。 而传输层最核心的协议就是UDP和TCP&#xff0c;这两个协议有较大差别&#xff0c;所以Qt提供了两套API。 要是有Qt网络编程的API&#xff0…