服务器端会话技术-Session

一、Session

1.1 概述和快速入门

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

快速入门

  1. 获取 HttpSession 对象
  2. 使用 HttpSession 对象

常用方法

方法 作用
HttpSession request.getSession() 通过 request 对象获取 HttpSession 对象
Object getAttribute(String name) 根据名称 获取属性值
void setAttribute(String name , Object value) 设置 键值对在 Session 域中
void removeAttribute(String name) 根据名称 移除键值对

1.2 Session 实现原理

Session 的实现是依赖于 Cookie 的。

服务器如何确保在一次会话范围内,多次获取的 Session 对象都是同一个呢?

  1. 使用 Cookie:服务器可以在客户端浏览器中设置一个唯一标识的 Cookie 对象,用于标识用户的会话。当客户端发起请求时,服务器可以根据该 Cookie 对象来识别用于的会话,并返回相应的 Session 对象
  2. URL 重写:服务器可以在每个页面的 URL 中添加一个唯一的会话标识符,以便在客户端发送请求时识别用户的会话,这样可以确保每次请求都能获取到相同的 Session 对象
  3. 隐藏表单字段:服务器可以在每个页面的表单中添加一个隐藏字段,用于存储会话标识符,当客户端提交表单时,服务器可以根据该字段来识别用户的会话,并返回相应的 Session 对象

服务器端会话技术-Session_第1张图片

1.3 Session 细节

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

  • 默认情况下,不是,但是我们可创建 Cookie 键为 JSESSIONID,并设置最大存活时间,让 Cookie 持久化保存

    // 创建 Cookie 对象并存储唯一标识
    Cookie cookie = new Cookie("JSESSIONID",session.getId());
    // 设置 Cookie 对象的存活时间为 1个小时
    cookie.setMaxAge(60*60);
    // 响应数据,发送 Cookie 对象
    response.addCookie(cookie);
    

2、客户端不关闭,服务器关闭后,两次获取 Session 是否为同一个?

  • 不是同一个,但是要确保数据不丢失,tomcat 自动完成以下工作(IDEA无法实现)
    • Session 的钝化:在服务器正常关闭之前,将 Session 对象系列化到硬盘上
    • Session 的活化:在服务器启动后,将 Session 文件转化为内存中的 Session 对象即可

3、 Session 什么时候被销毁?

  • 服务器关闭
  • Session 对象调用 invalidate() 方法
  • Session 对象默认失效时间为 30 分钟

1.4 Session 特点

  • Session 对象用于存储一次会话的多次请求的数据,存储在服务器端

  • Session 对象可以存储任意类型,任意大小的数据

1.5 Session 和 Cookie 的区别

  1. Session 存储数据在服务器端,Cookie 存储数据在客户端浏览器中
  2. Session 没有数据大小的限制,而 Cookie 有数据大小限制
  3. Session 数据安全,Cookie 数据相对于来说不安全

你可能感兴趣的:(Java,Web专栏,Session,服务器端会话技术)