会话跟踪技术session和cookie

随笔链接:

Cookie

  • 1.什么是Cookie
  • 2.Cookie的创建和服务器的获取

Session

  • 1.什么是Session

  • 2.Session的创建和获取

  • 3.Session域数据的处理

  • 4.Session的生命周期

  • 5.关于Session的两个问题

会话跟踪技术Session和Cookie:

HTTP协议是无状态协议,每个请求都是独立的,就像鱼一样没有记忆。也就是说无法记录前一次请求的状态,会话跟踪技术的出现就是解决该问题在一次会话的多个请求间共享数据,这就是会话跟踪技术。一次会话指的是:浏览器第一次给服务器发送请求,直到有一方断开,一次会话中包含多次请求和响应

Cookie

1.什么是Cookie

  • Cookie由一个键和一个值构成的

  • 随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器

  • 每个 Cookie 的大小不能超过 4kb,对同一个域名下的总cookie数量也有限制(20个)

2.Cookie的创建和服务器的获取

Cookie的创建过程:

 

  1.  创建Cookie
    Cookie cookie = new Cookie("key",value);
  2. 给客户端响应Cookie对象,通知客户端保存Cookie
    response.addCookie(cookie);

 服务器获取Cookie:

//服务器获取Cookie
Cookie[] cookies = request.getCookies();

Session

1.什么是Session

  • Session:Session 服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象HttpSession中

2.Session的创建和获取

Session的创建和获取的api是一样的

request.getSession() 
  • 第一次调用是创建 Session 会话

  • 之后调用都是获取前面创建好的 Session 会话对象

3.Session域数据的处理

使用HttpSession对象处理数据时常用的三个api

  1. Object getAttribute(String name) 根据指定的属性名称获取指定的值,返回结果是Object需要强转

  2. void setAttribute(String name, Object value) 绑定数据到此会话上,数据格式键/值对,name属性名 value属性值

  3. void removeAttribute(String name) 移除绑定的数据,根据键(属性名)移除

4.Session的生命周期

当我们关闭浏览器的时候session结束,一直没有关闭浏览器的话,Session 默认的超时时间长为 30 分钟

因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session 超时配置默认时长为:30 分钟

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

管理Session的生命周期时常用的三个api:

  1. public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁,值为负数时永不超时

  2. public int getMaxInactiveInterval() 获取 Session 的超时时间

  3. public void invalidate() 让当前 Session 会话马上超时无效

5.关于Session的两个问题

1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

  • 默认情况下不是,客户端每次关闭之后,重新访问会产生一个新的sessionId

  • 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存

2.客户端不关闭,服务器关闭后,两次获取的session是同一个?

  • 不是同一个,但是要确保数据不丢失tomcat自动完成以下工作

  • session的钝化:

    • 在服务器正常关闭之前,将session对象序列化到硬盘上

  • session的活化:

    • 在服务器启动后,将session文件转化为内存中的session对象

posted @   时光里的少年  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示