Web开发必备知识之Session会话

简介:web开发Session知识

什么是Session

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

生成和使用流程(和Cookie知识点一样,两者互相配合)

  • 览器器第⼀一次发送request请求到服务器器,服务器器除了了返回请求的response之外,还给请求分配⼀一个唯⼀一标识sessionId和response⼀一并返回给浏览器器
  • 服务器器在本地创建⼀一个map结构,专⻔门以key-value存储这个sessionId和浏览器器的关系
  • 当浏览器器的第⼀一次请求后已经分配⼀一个sessionId,当第⼆二次访问时会⾃自动带上这个标识sessionId
  • 服务器器通过查找这个sessionId就知道⽤用户状态了了,并更更新sessionId的最后访问时间。
  • 注意: Session是有时限性的:⽐比如如果30分钟内某个session都没有被更更新,服务器器就会删除这个它。

总结:

. Cookie 和 Session 的关系

  • Cookie 是存储在客户端(浏览器)中的小型文本文件,用于在客户端和服务器之间传递少量信息。Cookie 的典型用途是:

    • 保存用户的登录状态。
    • 跟踪用户的会话。
    • 保存用户偏好设置。
  • Session 是由服务器维护的一种用户会话状态管理方式。Session 通过服务器端的 Map(或其他数据结构)存储和管理用户会话数据,如登录信息、购物车内容等。

关键点:
  1. Session 依赖于 Cookie

    • 在大多数情况下,Session 的标识符(如 JSESSIONID)会通过 Cookie 发送到客户端。
    • 每次客户端发送请求时,浏览器会自动将存储的 Cookie(包括 JSESSIONID)发送回服务器,服务器根据这个 JSESSIONID 找到对应的 Session
  2. 如果客户端禁用了 Cookie,则可以通过 URL 重写(将 JSESSIONID 附加到 URL 中)来传递 Session 标识符。

使用场景:记录⽤用户的登录状态、权限

session的现状:

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

知识延伸:

服务端是单机情况下session是可以很好的使用,但是分布式(多台机器器)情况下就存在不能
共享的问题。
⽤用户A在当前机器器登录,突然某次请求到B机器器,由于B服务器器不存在这个用户的登录信息,所以就会提示重新登录,这个场景下就⽤用到分布式存储方案Redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值