一文快速回顾 Session 和 Cookie

科技资讯 投稿 5800 0 评论

一文快速回顾 Session 和 Cookie

前言

对于当时刚开始接触到这两个概念的我来说,这两个东西是非常模糊的,当然,这样也和我自己 Java 基础不牢固有关,导致在学习 Java Web 的过程中,埋下了许多地雷。现如今,从新梳理下,希望能给屏幕前的你带来收获。

Session 的概念

Session 是 Web 应用程序中的一种会话管理机制,用于存储和维护用户的会话状态。

那问题来了,什么是「会话」?

当用户访问 Web 应用时,服务器会创建一个唯一的会话 ID,并将其存储在用户的浏览器中的 Cookie 中。在接下来的请求中,浏览器会将会话 ID 作为参数发送给服务器,以便服务器可以识别用户并将其请求与之前的请求相关联。

为什么会有 Session?

HTTP 协议是无状态的,当用户在网站中进行多次请求,服务器并不能判断这些请求是不是来自同一用户,所以出现了一种技术,这种技术称为「会话跟踪技术」。

Session 就是其中一种会话跟踪技术,当然,后面说的 Cookie 也是。

Session 的原理

Session 的原理是基于服务器端的存储和管理,因此相对来说比较安全。在用户访问 Web 应用程序时,服务器会为每个用户创建一个唯一的 Session ID,服务器会将 Session ID 和对应的会话状态存储在内存或者数据库中,同时也返回一份 Session ID 给浏览器,让浏览器存储在 Cookie 中,并在一定时间内保持有效。当用户进行后续的请求时,服务器会根据 Session ID 来识别用户,并获取和维护用户的会话状态。最后,当用户关闭浏览器或者超过一定时间没有活动时,服务器会自动销毁对应的 Session。

    存储在服务器端,需要占用服务器资源(比如内存资源)
  • 失效时间短,一般只有数分钟或数小时
  • 难以跨域共享,不同域名的服务器无法共享 Session

代码如何写?

那服务器这边是怎样去存储和管理的呢?代码是怎样写的呢?

在Servlet API中,HttpSession 由 Servlet容器(比如 Tomcat)创建,它可以存储任意的 Java 对象,我们可以通过 setAttribute( 方法将对象绑定到 Session 中,之后通过 getAttribute( 方法获取绑定在 Session 中的对象。

    获取 Session 对象

我们可以通过 HttpServletRequest 的 getSession( 方法来获取 HttpSession 对象。如果 HttpSession 对象不存在,则会创建一个新的 Session 对象。

Session 常用方法

    setAttribute(String name, Object value:将一个名为 name,值为 value 的对象绑定到 Session 中。

  • getAttribute(String name:获取 Session 中绑定的名为 name 的对象。

  • removeAttribute(String name:从 Session 中删除名为 name 的对象。

  • getId(:获取 Session 的唯一标识符。

  • getCreationTime(:获取 Session 的创建时间。

  • getLastAccessedTime(:获取 Session 的最后访问时间。

  • setMaxInactiveInterval(int interval:设置 Session 的最大不活动时间间隔,单位为秒。

  • getMaxInactiveInterval(:获取 Session 的最大不活动时间间隔。

SessionServlet

@WebServlet(name = "SessionServlet", urlPatterns = "/session"
public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp throws ServletException, IOException {
        // 获取 Session 对象
        HttpSession session = req.getSession(;
        // 将用户名存储到 Se

编程笔记 » 一文快速回顾 Session 和 Cookie

赞同 (21) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽