Linux之http会话

会话管理

只需要在网站登录一次,就能在较长一段时间内保持登录在线,避免用户反复登录。

HTTP 是无状态、无连接的,它如何记住用户?

HTTP 协议本身无法识别两次请求是否来自同一个用户,但是浏览器可以配合会话机制保存信息。

补充区分:页面二次加载变快,是浏览器缓存 机制的作用,和登录会话不是一回事。 HTTP 本身没有连接的概念,传输层面的连接由 TCP 负责,通过 Connection 头部控制长 / 短连接。

为什么需要会话管理?

如果服务器无法记住用户身份,每次访问受保护资源都要重新登录,使用体验会非常糟糕。

这是怎么来实现的

HTTP 协议是无状态的,服务器不会记住上一次请求的用户信息。如果不做额外处理:用户登录成功后,再次发起新的资源请求时,服务器无法识别这个用户,会要求反复登录,无法维持登录状态。

Cookie 就是用来解决这个问题的:用户提交登录表单,服务器校验账号密码通过之后,在 HTTP 响应报文里通过Set-Cookie首部,把身份信息下发给浏览器;浏览器收到后把 Cookie 持久保存在本地。后续浏览器向服务器发起每一次请求时,都会自动在请求头带上这份 Cookie 数据;服务器拿到 Cookie 后,从中校验用户身份,以此识别用户,维持登录状态,不用每次请求都重新提交账号密码。

这个保存分为保存再内存中,或者是保存再某个文件中,用的较多的是保存在文件中,想要实现这个登录七天就要再次登录只需要再来设置一个cookie过期的时限就可以

但是一起上面的单纯使用cookie是用bug的,要是黑客再你的电脑里获得了中国cookie,就会实现盗号的功能,

基于此又有了session+cookie的方法来进行实现,就是把账号和密码不存储再客户端本地,反而是存储再服务端,

客户端先请求登录页面,服务器返回登录 HTML 页面。用户填写账号密码提交表单,服务器收到信息校验通过后,在服务端本地用结构体存储该用户的会话信息 ,并生成唯一标识 sessionId。 服务器通过响应头Set-Cookie,把这个 sessionId 返回给浏览器,浏览器将 sessionId 保存在 Cookie 里。 后续客户端再去请求受保护资源时,会自动在请求 Cookie 中带上 sessionId。服务器拿到 sessionId,在本地会话表中查找对应的用户信息,完成身份识别,不用每次都传递账号密码。

Session 方案解决了账号明文泄露的问题,不再把用户敏感信息存放在 Cookie 中。 但它依然存在安全隐患:如果黑客窃取到用户的 Session ID,就可以冒充该用户访问资源,实现盗号。

这类风险无法从根源上彻底杜绝,但我们可以在上层业务逻辑中增加风控检测:系统持续识别用户行为,例如登录地点频繁切换、短时间大量发送消息等异常行为。一旦判定风险,服务器可以主动销毁对应的 Session ID,强制会话失效。

相关推荐
江屿风1 小时前
【Linux系统】【从【收尾】缓冲区到【新开】磁盘块:一节课打通文件系统底层原理】流食般投喂
linux·运维·服务器·人工智能·笔记
_upupup1 小时前
Linux中的权限解析
linux·服务器
曹牧1 小时前
Spring MVC : Controller 层URL划分
java·运维·服务器·前端
宵时待雨2 小时前
linux笔记归纳24:多路转接select
linux·服务器·笔记·高并发
z落落2 小时前
C#UDP 广播服务端+客户端
网络·网络协议·udp
gnsnswa2 小时前
回归岗位价值:CAIE 认证适合人群与能力定位
人工智能·网络协议·职场和发展·产品经理·创业创新·信息与通信·ai写作
故乡dee云2 小时前
2026年华为云国际账号开通避坑:IP自动跳转中国站,选错地区只能重新注册
服务器·tcp/ip·华为云
爱签AI电子合同2 小时前
电子合同大批量怎么测?并发与批量处理维度专项测评
服务器·数据库·人工智能·企业微信·电子签名
土星云SaturnCloud2 小时前
HRNet-pose 算法全解析:从高分辨率网络原理到土星云 SE110S 边缘部署实战
服务器·人工智能·算法·ai·边缘计算