servlet中的 session、cookie

本文介绍了Servlet中的Session和Cookie。Session用于解决HTTP协议的无状态问题,存储系统信息,其内容存储在服务器内存中,关闭浏览器即结束会话。通过示例展示了Session的创建和应用,强调了Session无法直接删除的特点。而Cookie则是在浏览器中写入和读取的数据,用于辅助实现客户端的状态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是session

1、session在网络应用中,称为“会话控制”

2、表示一次会话(浏览器打开到浏览器关闭)。Session存储在服务器的内存中。

3、为什么有Session

(1)、解决HttpServlet协议的无状态

(2)、存储系统信息(为了程序提高用户体验性)

4、重点(应用)


			1、获取Session对象
				HttpSession session = request对象.getSession();
			2、设置Session的值
				session对象.setAttribute("名",值);
			3、读取Session的值
				Session对象.getAttribute("名");
			4、移除Session的属性值
				Session对象.removeAttribute("名");
			5、设置过期时间
				session对象.setMaxInactiveInterval(秒)
			6、session失效
				session对象.invalidate();

(1)、创建Session01 ,重定向到Session02

package com.lihaozhe.servlet.session; /**
 * @author 司培亮
 * @version 1.0.0 2022/6/15 上午9:27
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "Session01", value = "/Session01")
public class Session01 extends HttpServlet {

    private static final long serialVersionUID = -6360411000776643598L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是session01");
        //获取httpsession对象
        HttpSession session = request.getSession();
        //向session域存储 向session绑定
        session.setAttribute("slogan","桃李不言下自成蹊");
        System.out.println("session01  sessionID" + session.getId());
        response.sendRedirect(request.getContextPath()+"/Session02");

    }


}

(2)、创建Session02

package com.lihaozhe.servlet.session; /**
 * @author 司培亮
 * @version 1.0.0 2022/6/15 上午9:27
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "Session02", value = "/Session02")
public class Session02 extends HttpServlet {

    private static final long serialVersionUID = -8078758013937781831L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是sessiont02");
        HttpSession session = request.getSession();
        String solgan = (String)session.getAttribute("solgan");
        System.out.println("slogan>>>>"+solgan);
        System.out.println("session02  sessionID" + session.getId());
    }


}

(3)、创建Session03

package com.lihaozhe.servlet.session; /**
 * @author 司培亮
 * @version 1.0.0 2022/6/15 上午9:27
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "Session03", value = "/Session03")
public class Session03 extends HttpServlet {

    private static final long serialVersionUID = 5794916372014247823L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是sessiont03");
        HttpSession session = request.getSession();
        String solgan = (String)session.getAttribute("solgan");
        System.out.println("slogan>>>>"+solgan);
        System.out.println("session03  sessionID" + session.getId());
    }


}

(4)、打开服务器,在浏览器中访问session03,服务器的控制台输出的session01的slogan是null

我是sessiont03
slogan>>>>null

然后再用浏览器访问session01,就会跳转到session02,服务器控制台输出如下:

我是session01
我是sessiont02
slogan>>>>桃李不言下自成蹊

 这时再访问session03,输出的结果与session02一致

我是sessiont03
slogan>>>>桃李不言下自成蹊

这是因为先访问的session03与未访问的session01不在一个会话中,之后访问了session01,这时session01与session03在同一个会话中。

(5)、关闭浏览器就相当与结束了这段会话,在访问session03输出的值仍是null。 

5、session的特点 :session无法删除

二、什么是cookie

1、一般由服务器端进行创建,保存在客户端(内存|硬盘——物理文件)
2、为什么有Cookie
		(1)、解决Http协议的无状态
			http协议:请求响应
				  建立TCP连接
				  发送请求
				  服务器响应
				  断开连接
		(2)、存储系统信息(为了程序提高用户体验性)

3、为什么有的Cookie浏览器重新打开后就消失了?
		Cookie可以分为:内存中的Cookie和文件中的Cookie
		缺点
		(1)、安全性较低
		(2)、可以被禁用

4、重点(应用)
		(1)、Cookie的创建及读取
		(2)、设置过期时间及访问路径

5、在浏览器中写入cookie

package com.lihaozhe.servlet.cookie; /**
 * @author 司培亮
 * @version 1.0.0 2022/6/15 上午9:46
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.net.URLEncoder;

@WebServlet(name = "WriteCookie", value = "/WriteCookie")
public class WriteCookie extends HttpServlet {

    private static final long serialVersionUID = 4525057663530795312L;
    //这个是存储cookie
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //Cookie为key-value结构
        //cookie一般由服务器创建,存储在客户端
        //1、、服务器创建cookie
        Cookie c1 = new Cookie("c1","phoenix");
        Cookie c2 = new Cookie("c2", "lihaozhe");
        // URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded
        // MIME字符串之间的相互转化
        // 如果传递的字符串中包含非西欧字符的字符串,会被转化成%XX%XX XX为十六进制的数
        Cookie author = new Cookie("author", URLEncoder.encode("李昊哲", "utf-8"));
        Cookie slogan = new Cookie("slogan", URLEncoder.encode("桃李不言下自成蹊", "utf-8"));
        //2、设置cookie过期时间,单位秒
        c2.setMaxAge(60);
        author.setMaxAge(60 * 60 * 24 * 7);
        slogan.setMaxAge(60 * 60 * 24 * 7);
        //设置访问路径,客户端是否可以操作cookie
        c2.setHttpOnly(true);
        //将cookie保存在客户端
        response.addCookie(c1);
        response.addCookie(c2);
        response.addCookie(author);
        response.addCookie(slogan);
    }


}

6、读取cookie

package com.lihaozhe.servlet.cookie; /**
 * @author 司培亮
 * @version 1.0.0 2022/6/15 上午11:36
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.net.URLDecoder;

@WebServlet(name = "ReaderCookie", value = "/ReaderCookie")
public class ReaderCookie extends HttpServlet {

    private static final long serialVersionUID = 6945492819977172654L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("author".equalsIgnoreCase(cookie.getName()) || "slogan".equalsIgnoreCase(cookie.getName())) {
                System.out.println(cookie.getName() + " >>> " + URLDecoder.decode(cookie.getValue(), "utf-8"));
            } else {
                System.out.println(cookie.getName() + " >>> " + cookie.getValue());
            }
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值