java要实现多次会话,Java第四十二天,会话内容(三),Session(一)

一、概念

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

二、使用

1.获取对象

HttpServletRequest request = ......

HttpSession session = HttpServletRequest.getSession()

2.常用方法

Object obj = Session.getAttribute(String name)

Session.setAttribute(String name, Object value)

Session.removeAttribute(String name)

3.举例

(1)创建 Session

package web.servlet;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.*;

import java.io.IOException;

@WebServlet(urlPatterns = {"/first"})

public class FirstServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 创建 Session 对象

HttpSession session = request.getSession();

// 设置 编码格式,并且告诉浏览器解码格式,防止中文乱码

response.setContentType("text/html;charset=utf-8");

// 将 session 添加到 response 对象中

session.setAttribute("name", "小红");

// 重定向

response.sendRedirect("second");

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doGet(request,response);

}

}

(2)获取 Session

package web.servlet;

import javax.servlet.*;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.*;

import java.io.IOException;

@WebServlet("/second")

public class SecondServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取 session

HttpSession session = request.getSession();

Object name = session.getAttribute("name");

// 设置编码及解码格式

response.setContentType("text/html;charset=utf-8");

// 遍历所有 cookie

response.getWriter().write(name.toString());

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

三、原理

Session的实现是依赖于Cookie的

bb356c2685383a8a58d97b918a042839.png

四、细节

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

默认情况下,不是

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

Cookie cookie = new Cookie("JSESSIONID", session.getId());

cookie.setMaxAge(存活时间);

response.addCookie(cookie);

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

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

ession的钝化 ===> 在服务器正常关闭之前,将session对象系列化到硬盘上

session的活化 ===> 在服务器启动后,将session文件转化为内存中的session对象即可

注意:

Tomcat 已经将 钝化 和 活化 给完成了(Tomcat 正常关闭前会将当前的 session 数据保存到当前工作目录的 work 目录下的某个文件,再次启动后会读取该 work 目录下保存 session 数据的文件,然后把该文件删除),不需要我们操作;但是 IDEA 集成 Tomcat 时每次重启项目都会删除 work 目录,导致活化失败(钝化是成功的)

3. session什么时候被销毁?

服务器关闭

session对象调用invalidate()

session默认失效时间 30分钟

可以修改配置文件

30

五、特点

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

session可以存储任意类型,任意大小的数据

六、session与Cookie的区别:

session存储数据在服务器端,Cookie在客户端

session没有数据大小限制,Cookie有

session数据安全,Cookie相对于不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值