首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >会话跟踪技术之Session

会话跟踪技术之Session

作者头像
高大北
发布2022-06-14 20:37:51
发布2022-06-14 20:37:51
3120
举报

Session介绍

什么是Session?
  • 背景:HTTP协议是无状态协议,无状态是指每次request请求之前是相互独立的,当前请求并不会记录它的上一次请求信息
  • 问题:既然无状态,那么完成一整套业务逻辑,需要发送多次请求,那么怎么标识这些请求都是同一个浏览器操作呢?
  • cookiesession都是为了弥补http协议的无状态特性,对server端来说无法知道两次http请求是否来自同一个用户,利用cookiesession就可以让server端知道多次http请求是否来自同一用户

生成和使用流程(和Cookie知识点一样)

  • 浏览器第一次发送request请求到服务器,服务器除了返回请求的response之外,还给请求分配一个唯一标识sessionIdresponse一并返回给浏览器
  • 服务器在本地创建一个map结构,专门以key-value存储这个sessionId和浏览器的关系
  • 浏览器的第一次请求后已经分配一个sessionId,当第二次访问时会带上sessionId
  • ⚠️ sessionId是有时限性的,比如如果30分钟内某个sessionId都没有被更新,服务器就会删除它

总结

  • 服务器生成这个全局唯一标识,传递给客户端用于标记这次请求(即cookie
  • 服务器创建的那个map结构就是session
  • cookies由服务器生成,用于标记客户端的唯一标识,在每次网络请求中,都会被传送
  • session服务端自己维护的一个map数据结构,记录key-Object上下文内容状态
  • 总而言之,cookie是保存在客户端,session是存在服务端,session依赖于cookie
  • cookie里面存储的就是JSESSIONID

使用场景

  • 记录用户的登录状态、权限等

session现状

  • session是存储在服务端的内存中,在Java web里面叫HttpSession,也是一个作用域
  • PageContext(页面)->ServletRequest(请求)->【HttpSession】(会话)->ServletContext(一个应用)
  • 是可以存储很多key-value的,作用域比较广,但是也不能存储过多的内容,因为内存是有限制的。互联网企业使用的比较少,传统IT公司使用比较多

知识延伸

  • 服务端是单机情况下session是可以使用的,但是分布式(多台机器)情况下就存在session不能共享的问题
  • 用户A在当前机器登录,突然某次请求到B机器,由于B服务不存在这个用户的登录信息,所以就会提示重新登录
  • 这个场景下就用到分布式存储方案,比如Redis
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Session介绍
    • 什么是Session?
  • 生成和使用流程(和Cookie知识点一样)
  • 总结
  • 使用场景
  • session现状
  • 知识延伸
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档