HttpSession常用方法

1.HttpSession常用方法

是在Java Servlet中用来管理会话状态的重要接口,它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法:

获取会话对象:

HttpSession session = request.getSession();


这会返回当前请求的会话对象。如果客户端之前没有会话,这个方法会创建一个新的会话对象;如果已经有会话,则返回现有的会话对象。

设置和获取会话属性:

// 设置属性
session.setAttribute("username", "john_doe");

// 获取属性
String username = (String) session.getAttribute("username");


通过 setAttribute 方法可以将任意类型的对象存储到会话中,通过 getAttribute 方法可以获取之前存储在会话中的对象。

获取会话ID:

// 设置属性
session.setAttribute("username", "john_doe");

// 获取属性
String username = (String) session.getAttribute("username");

(1)getId() 方法

返回当前会话的唯一标识符,通常是一个字符串。

判断会话是否新建:


boolean isNew = session.isNew();


(2)isNew() 方法

返回一个布尔值,表示当前会话是否是新创建的。如果是新会话,返回 true;否则返回 false。

设置会话过期时间:


// 设置会话过期时间为30分钟(单位是秒)
session.setMaxInactiveInterval(1800);
setMaxInactiveInterval 方法设置会话的最大非活动时间间隔,即在用户没有活动(没有请求)的情况下会话保持活跃的时间。在超过该时间后,会话将被销毁。

销毁会话:

java
session.invalidate();
invalidate() 方法用于销毁当前会话。一旦会话被销毁,会话中存储的所有属性和数据都将被清除。

获取会话创建时间:

java
long creationTime = session.getCreationTime();
getCreationTime() 方法返回会话的创建时间,以毫秒数表示,即从1970年1月1日0时0分0秒(GMT时间)至会话创建时的毫秒数。

获取最后访问时间:

java
long lastAccessedTime = session.getLastAccessedTime();
getLastAccessedTime() 方法返回会话的最后访问时间,以毫秒数表示,即上次客户端请求时的时间。

这些方法和用法使得开发者可以方便地管理用户的会话状态,存储用户相关的数据,并在需要时执行特定的会话管理操作。

2.session.isNew()

Java Servlet API 中的一个方法,用于判断当前会话(session)是否是新创建的。

在Java Web应用程序中,会话是指客户端(通常是浏览器)与服务器之间一段特定的交互时间,用于跟踪用户的状态和数据。当客户端第一次访问服务器时,会话可能会被创建,这时候 session.isNew() 方法会返回 true。一旦会话已经存在,并且客户端与服务器之间有交互,即使是重新访问页面,该方法也会返回 false。

典型的用法是在Servlet中使用该方法来判断当前请求是否是新会话,从而执行相应的逻辑或初始化工作。

例如,可以这样使用:

java
HttpSession session = request.getSession();
if (session.isNew()) {
    // 如果是新会话,执行某些初始化操作
    // 例如设置初始值、记录日志等
} else {
    // 如果不是新会话,执行其他操作
    // 例如读取会话中的数据、更新状态等
}


这种方法对于管理用户状态和个性化内容非常有用,因为可以根据会话是否新建来执行不同的逻辑处理。

3.session.getId()

 HttpSession 接口中的一个方法,用于获取当前会话的唯一标识符(Session ID)。每个会话在创建时都会被分配一个唯一的标识符,用于标识该会话,通常以字符串形式返回。

在使用 getId() 方法时,可以获取当前会话的唯一标识符,并用于各种会话管理和数据存储操作中。例如,可以将该标识符用于日志记录、跟踪用户活动、或者与其他系统(如数据库)进行关联以识别特定会话。

示例用法如下:

java
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("Session ID: " + sessionId);
此代码段中,通过 session.getId() 获取了当前会话的标识符,并将其打印输出。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        System.out.println(session.getId());
        System.out.println(session.isNew());
    }
}

操作:Tomcat自动打开浏览器,复制网址,重新开浏览器

原因:Tomcat启动时会先创造session(会话),所以一直是false

执行结果:

4.invalidate()

HttpSession 接口中的一个方法,用于销毁当前会话。调用 invalidate() 方法将会导致当前会话及其所有关联的数据(即会话属性)被立即销毁并移除。

在使用 invalidate() 方法时,会话对象和其关联的数据将被清除,这包括通过 setAttribute() 方法设置的所有会话属性。通常情况下,调用 invalidate() 是为了确保在用户注销或会话超时时清除会话数据,从而释放资源并保持系统的安全性和一致性。

示例用法如下:

HttpSession session = request.getSession();
session.invalidate();


在这个示例中,通过 request.getSession() 获取当前会话对象,然后调用 invalidate() 方法来销毁该会话。一旦会话被销毁,后续对 session 对象的任何操作都将无效,并且之前存储在会话中的数据将不再可用。

需要注意的是,调用 invalidate() 并不会立即将会话从内存中删除,而是在当前请求结束后才会真正执行销毁操作。

 

 

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        System.out.println(session.getMaxInactiveInterval());
        System.out.println(session.getCreationTime());
        System.out.println(session.getLastAccessedTime());

    }
}

 

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值