JAVA_会话

news2024/9/25 19:16:11

会话技术

1.会话: 一次会话包含多次请求和响应
2.功能: 在一次会话的范围内的多次请求,共享数据
3.方式:
3.1.客户端会话技术 Cookie(甜点)
1.概念: 客户端会话技术,将数据保存到客户端
2.快速入门: 
	1.创建Cookie对象,绑定数据
		new Cookie(String name,String value);
	2.发送Cookie对象
		response.addCookie(Cookie cookie);
	3.获取Cookie,拿到数据
		Cookie[] cs = request.getCookies();
		//遍历
		if(cs!=null){
			for(Cookie c:cs){
				String name = c.getName();
				String value = c.getValue();
				System.out.println(name+" : "+value);
			}
		}	

原理: 基于响应头set-cookie和请求头cookie实现
在这里插入图片描述

1.: 一次可不可以发送多个cookie
  答: 可以,可以创建多个cookie且发送多次

2.: cookie在浏览器中保存多久
  答: 1.默认情况下浏览器关闭后cookie消失
      2.持久化存储: setMaxAge(int seconds);
      		1.正数: 将cookie数据持久化存储,具体的是时间秒
      		2.负数: 默认值
      		3.: 删除cookie信息

3.: cookie能不能存中文
  答: 在tomcat8之后可以,8之前的可以URL转码

4.: 在同一个tomcat中部署了多个web项目,那么各个项目之间cookie能否共享
  答: 默认情况下cookie不能跨项目共享,但是可以setPath(String path);设置范围比如:
      Cookie c = new Cookie("name","XYZ");
      c.setPath("/");
5.: 不同tomcat服务器下的项目能否共享cookie
  答: setDomain(String path);
      如果设置一级域名相同,那么可以共享,如下:
      setDomain(".baidu.com");
      tieba.baidu.com 和 news.baidu.com中的cookie可以共享
cookie的特点
1.cookie存储数据在客户端
2.浏览器对于单个cookie的大小有限制4kb 以及一个域名下cookie数量最多203.cookie一般用于少量不敏感的数据存储
4.可用于在不登录的情况下服务端对客户端进行身份识别

案例:用户登录时显示上一次登录的时间

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * @author Sun
 * @version 2021.2
 * @date 2022/5/5 17:28
 */
@WebServlet("/LastAssessTime")
public class LastAssessServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //指定服务器输出内容编码方式,以防发生乱码
        resp.setContentType("text/html;charset=utf-8");
        //获取所有的cookie
        Cookie[] cookies=req.getCookies();
        //定义flag 用于判断cookies是否为空
        boolean flag=false;
        //遍历cookie数组
        if (cookies!=null && cookies.length>0){
            for (Cookie cookie:cookies) {
                //获取cookie的名称
                String name=cookie.getName();
                //判断名称是否为LastAssessTime
                if ("LastAssessTime".equals(name)){
                    //该cookie不是第一次访问
                    flag=true;
                    //响应数据
                    //获取cookie中的value时间
                    String value=cookie.getValue();
                    resp.getWriter().write("上次访问时间"+value);
 
                    //设置cookie的value
                    //获取当前时间的字符串,重新设置cookie的值,重新发送cookie
                    Date date=new Date();
                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
                    String time= sdf.format(date);
                    cookie.setValue(time);
 
                    //设置cookie存活时间
                    cookie.setMaxAge(60*60*24*5);//5天
                    //加入当前cookie请求时间
                    resp.addCookie(cookie);
                    break;
                }
            }
        }
        if (cookies==null || cookies.length==0 || flag==false){
            //设置cookie的value
            Date date=new Date();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
            String time= sdf.format(date);
            Cookie cookie=new Cookie("LastAssessTime",time);
            //设置cookie存活时间
            cookie.setMaxAge(60*60*24*5);//5天
            //加入当前cookie请求时间
            resp.addCookie(cookie);
            resp.getWriter().write("欢迎首次访问");
 
        }
 
 
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}
3.2.服务器会话技术 Session(主菜)
1.概念: 在一次会话的多次请求间共享数据存储在服务器对象中 HttpSession
2.快速入门: HttpSession
	request.getSession();
	Object getAttribute(String name);
	void setAttribute(String name,Object value);
	void removeAttribute(String name);

session依赖于cookie实现,会默认响应头Set-Cookie中带一个JSESSIONID以下是原理图
在这里插入图片描述

1.: 客户端关闭,服务器不关闭,两次session是同一个吗?
  答: 默认情况下,不是(因为属于两次会话了)
      可以将JSESSIONID覆盖来延长生命周期,如下:
      Cookie c = new Cookie("JSESSIONID",session.getId());
      c.setMaxAge("3600");
      response.addCookie(c);

2.: 客户端不关闭,服务器重启后,两次session是同一个吗?
  答: 不是同一个,但需要确保数据不丢失(tomcat已经完成这个操作了)。
      session钝化:
      	在服务器关闭之前将session对象序列化到硬盘
      session活化:
      	在服务器启动后将session文件转化为内存中的session对象即可

3.: session什么时候销毁
  答: 1.服务器关闭
      2.session对象调用invalidate();
      3.session的默认失效时间是30分钟(tomcat根目录下的conf/web.xml中可以配置)  	
session的特点
1.session用于存储一次会话多次请求的数据,存储在服务端
2.session可以存储任意类型,任意大小的数据
cookie(甜点)与session(主菜)的区别
1.session存储数据在服务端,cookie存储数据在客户端
2.session没有大小限制,cookie有大小限制
3.session数据相对安全,cookie数据相对不安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

msvcp140.dll是什么文件?msvcp140.dll丢失如何解决(最新教程)

在玩电脑的时候,经常会碰到一些烦人的东西,比如那个“msvcp140.dll丢失”啥啥啥的。这个东西一出现,整个人都不好了,完全影响了我们愉快电脑生活的节奏。为啥会出现msvcp140.dll丢失的这种情况,怎么解决,还…

精读《架构设计之 DCI》

本期精读文章是:The DCI Architecture 1 引言 随着前端 ES6 ES7 的一路前行, 我们大前端借鉴和引进了各种其他编程语言中的概念、特性、模式; 我们可以使用函数式 Functional 编程设计,可以使用面向对象 OOP 的设计,可以使用面向…

【C++从练气到飞升】04---拷贝构造函数

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书。 目录 ⛳️推荐 一、拷贝构造函数的引入 1. 以日期类为例:进行的值拷贝是不会发生错误的 2. 以栈类为例:进行的值拷贝会发现发…

C语言基础(十六)通过指针来输入和获取结构体的变量值

老样子&#xff0c;先看代码 #include <stdio.h> #include <string.h>#define NLEN 30 struct namect{char fname[NLEN];char lname[NLEN];int letters; };void getinfo(struct namect *); void makeinfo(struct namect *ptr); void showinfo(const struct namec…

Kubernetes的Namespace使用

在 Kubernetes 中&#xff0c;命名空间提供了一种用于隔离单个集群中的资源组的机制。资源名称在命名空间内必须是唯一的&#xff0c;但不能跨命名空间。基于命名空间的作用域仅适用于命名空间物体 &#xff08;例如部署、服务等&#xff09;而不是集群范围的对象&#xff08;例…

牛客周赛 Round 37VP(DEF)

D.思维题&#xff1a; 若按照顺序发现很难入手&#xff0c;于是我们不妨先小紫&#xff0c;再让小红反悔即可 假设为cabababbabazbc&#xff0c;如果直接小紫&#xff0c;那么它一定以a开头&#xff0c;于是小红可以先把首尾的a去掉&#xff0c;即czbc,此时可以得到bc,于是小红…

19---时钟电路设计

视频链接 时钟硬件电路设计01_哔哩哔哩_bilibili 时钟电路设计 晶振是数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路至关重要&#xff01; 1、晶振概述 晶振一般指晶体振荡器。晶体振荡器是指从一块石英晶体上按一定方位角切下薄片&…

基于stable diffusion的IP海报生成

【AIGC】只要10秒&#xff0c;AI生成IP海报&#xff0c;解放双手&#xff01;&#xff01;&#xff01;在AIGC市场发展的趋势下&#xff0c;如何帮助设计工作者解放双手。本文将从图像生成方向切入&#xff0c;帮助大家体系化的学习Stable diffusion的使用&#xff0c;完成自有…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;而且能够集成在IDE、Jenkins、Git等服务中&#xff0c;方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准&#xff1a;如命…

【回归预测】基于DBO-BP(蜣螂优化算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#68】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 蜣螂优化算法3. DBO-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神…

[云] vmware: host: net: Net.CoaleseDefaultOn

https://communities.vmware.com/t5/Storage-Performance/Advanced-Networking-Performance-Options/ta-p/2792649 在vsphere client下的路径是&#xff1a; 选择使用的host -> 右键setting->configure-> system->advanced system setting->edit->Net.Coales…

第九节HarmonyOS 常用基础组件31-Toggle

1、描述 组件提供勾选框样式、状态栏样式以及开关样式。 2、子组件 仅当ToggleType为Button时可包含子组件。 3、接口 Toggle(options: { type: ToggleType , isOn?: boolean}) 4、参数 参数名 参数类型 必填 描述 type ToggleType 是 开关的样式。 isOn boole…

蓝桥杯 第3217题 简单的异或难题 C++ Java Python

题目 思路和解题方法 计算给定数组中子数组异或和的问题。它采用了前缀异或的方法来预处理数组&#xff0c;然后对于每个查询&#xff0c;通过异或操作计算子数组的异或和。 读取输入的数组&#xff0c;并计算每个位置的前缀异或和。对于每个查询&#xff0c;读取查询的左右边界…

一文读懂MES和ERP的区别

MES&#xff08;Manufacturing Execution System&#xff09;系统是制造执行系统&#xff0c;位于上层的计划管理系统与生产过程的直接工业控制系统之间&#xff0c;是面向车间层的管理信息系统&#xff0c;能够对整个车间制造过程进行优化&#xff0c;实时收集生产过程中的数据…

python 爬虫 地理空间DEM 制作中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Java毕业设计-基于springboot开发的乐校园二手书交易管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、卖家用户功能模块4、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springbo…

docker 修改日志存储路径

docker 日志默认存放在 /var/lib/docker/ 下 docker info修改步骤&#xff1a; 1、停止docker服务 systemctl stop docker 2、新建配置文件 vi /etc/docker/daemon.json添加如下内容 {"data-root": "/data/docker" }3、然后把之前的数据全部复制到新目…

LabVIEW柴油机安保监控系统

LabVIEW柴油机安保监控系统 随着航运业的快速发展&#xff0c;确保船舶柴油机的安全稳定运行变得尤为重要。船舶柴油机故障不仅会导致重大的经济损失&#xff0c;还可能危及人员安全和环境。设计并开发了一套基于LabVIEW平台的柴油机安保监控系统&#xff0c;旨在通过实时监控…

C++ 子序列

目录 最长递增子序列 摆动序列 最长递增子序列的个数 最长数对链 最长定差子序列 最长的斐波那契子序列的长度 最长等差数列 等差数列划分 II - 子序列 最长递增子序列 300. 最长递增子序列 子数组是连续的&#xff0c;子序列可以不连续&#xff0c;那么就要去[0, i - 1]…

带你学会深度学习之卷积神经网络[CNN] - 4

前言 本文不讲述如泛化&#xff0c;前向后向传播&#xff0c;过拟合等基础概念。 本文图片来源于网络&#xff0c;图片所有者可以随时联系笔者删除。 本文提供代码不代表该神经网络的全部实现&#xff0c;只是为了方便展示此模型的关键结构。 CNN&#xff0c;常用于计算机视…