Session【重点】

概述

    Session是保存在服务器端的一个会话控制对象,保留浏览器访问当前服务器提供的资源和必要信息。允许浏览器多次访问情况下,都可以获取到对应的Session信息。
    浏览器使用Cookie保存Session的核心数据 Session ID号!!!

Cookie和Session对比:
Cookie数据
    个数限制,数据方式限制(String类型键值对),不支持中文,数据量限制4KB

Session数据
    1. 服务器保存Session数据的个数没有限制
    2. Session存储数据的方式是键值对形式,键是String类型,但是值可以是任意类型。Session可以看做是一个Map双边队列 ==> HashMap<String, Object>
    3. 中文没问题
    4. 数据量也是没有问题,但是多多少少克制一下。

Session 工作原理

    Session会话技术是依托于Cookie
    1. 浏览器第一次访问对应的服务器,服务器会根据当前访问的时间,其他参数生成一个Session ID号,这个ID号是不可以重复的!!!
    2. 利用Cookie技术,服务器将Session ID号发送给浏览器保存
    3. 浏览器第二次访问对应的服务器,会带有Session ID号的Cookie访问对应的资源,服务器可以根据Session ID 找到对应的Session,从Session获取对应的数据。
    4. 浏览器如果关闭Cookie技术,Session使用时非常麻烦,需要利用URL重写技术
    5. 浏览器本地保存Session ID的cookie JSESSIONID 名字固定

常用方法

// 【重点】获取Session对象,如果没有创建一个新的Session【通过请求对象】
HttpSession getSession();

// 【重点】参数为true,获取对应请求的Session对象,如果没有创建一个新的Session。参数为false,只会获取对应当前请求的Session,没有返回null
HttpSession getSession(boolean var1);

// 获取 session 的 id
String getId();

// 获取最后一次的访问时间
long getLastAccessedTime();

// 【重点】设置 session 过期时间
void setMaxInactiveInterval(int var1);

// 获取过期时间
int getMaxInactiveInterval();

// 【重点】设置属性,如果当前属性名已存在则替换属性值,类似Map中的put方法
void setAttribute(String var1, Object var2);

// 【重点】获取对应参数的值
Object getAttribute(String var1);

// 【重点】移除对应的属性
void removeAttribute(String var1);

// 【重点】销毁Session
void invalidate();

使用

创建 Session

/**
 * 测试 session
 */
@WebServlet("/CreateSession")
public class CreateSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 获取 session 对象,因为当前没有,所以不带参数或者加上 true
        HttpSession session = request.getSession();

        // 设置参数
        session.setAttribute("name", "中文");

        // 获取 session 的 id
        System.out.println("getID:" + session.getId());

        // 设置 session 过期时间
        session.setMaxInactiveInterval(120);
    }
}

获取 Session

/**
 * 测试获取 session
 */
@WebServlet("/GetSession")
public class GetSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 获取 session 对象,因为当前没有,所以不带参数或者加上 true
        HttpSession session = request.getSession(false);

        // 非空判断
        if (session != null) {
            // 获取session中属性对应的值
            System.out.println("name:" + session.getAttribute("name"));

            // 获取 session 的 id
            System.out.println("getID:" + session.getId());

            // 获取最后一次的访问时间
            long lastAccessedTime = session.getLastAccessedTime();
            System.out.println(lastAccessedTime);

            // 获取 session 过期时间
            System.out.println(session.getMaxInactiveInterval());

            // 获取 session 创建时间
            System.out.println(session.getCreationTime());

            // 删除 session 中键为 name 的键值对
            session.removeAttribute("name");
        } else {
            System.out.println("session 为空");
        }
    }
}

销毁 Session

/**
 * 测试销毁Session
 */
@WebServlet("/DestroySession")
public class DestroySessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        // 获取 session 对象,因为当前没有,所以不带参数或者加上 true
        HttpSession session = request.getSession(false);

        // 非空判断
        if (session != null) {
            // 获取session中属性对应的值
            System.out.println(session.getAttribute("name"));

            // 获取 session 的 id
            System.out.println("getID:" + session.getId());

            // 销毁 session 对象
            session.invalidate();
        } else {
            System.out.println("session 为空");
        }
    }
}
最后修改:2021 年 01 月 24 日 12 : 11 PM
如果觉得此文章有用,请随意打赏