JAVA_会话

会话技术

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数据相对不安全

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3000+人使用,这套人力资源数据分析工具还能这么用

中国科学院自动化研究所(以下简称“自动化所”)成立于1956年,是中国科学院率先布局成立的“人工智能创新研究院”的总体牵头单位,是中国最早开展智能科学与技术基础理论、关键技术和创新性应用研究的科研机构,也是中国…

G1和ZGC垃圾回收器学习

前言 ​ 随着JDK17的占有率不断升高和SpringBoot3最低支持JDk17,JDK17很大概率会成为大家后续升级的一个选择,而JDK17上最重要的垃圾回收器G1和ZGC,也就显得格外重要。大家提前了解或者学习一下肯定是有用的。 ​ 本篇文章也默认大家了解一…

Python 全栈体系【四阶】(十五)

第五章 深度学习 一、基本理论 1. 深度学习概述 1.1 引入 1.1.1 人工智能划时代事件 2016 年 3 月,Google 公司研发的 AlphaGo 以 4:1 击败世界围棋顶级选手李世石。次年,AlphaGo2.0 对战世界最年轻的围棋四冠王柯洁,以 3:0 击败对方。背后…

PCB板的叠构剖析及实际案例

PCB板可以有不同的层叠结构,具体取决于电路设计的要求和应用的复杂性。 以下是一些常见的PCB板叠构,包括单层、双层和多层PCB: 单层PCB(Single-Layer PCB): 基本结构: 单层PCB由一个绝缘性基板组…

sqllab第二十八关通关笔记(附带28a)

知识点: union select 整体过滤 union all select 替换where id(输入)空格 过滤了,使用%09代替 经过不断的测试,发现原始语句为 where id(输入) 构造payload:id1)and%091(1 成功回显出了相关的信息 好,尝试进行错误注入 构造…

理解树的结构-算法通关村

理解树的结构-算法通关村 1.树的结构 树是一个有n个有限节点组成一个具有层次关系的集合,每个节点有0个或者多个子节点,没有父节点的节点称为根节点,也就是说除了根节点以外每个节点都有父节点,并且有且只有一个。树的种类比较多…

如何自定义异常类

如何自定义异常类 为什么要使用自定义异常类? 在 Java 中,自定义异常是指用户根据自己的需求创建的异常类。Java 提供了一些预定义的异常类,如 NullPointerException、ArrayIndexOutOfBoundsException 等,但有时这些预定义的异常…

直播预告!5位大厂测开学长学姐助力你上岸测开

大家好,我是洋子,24届春招补录&25届暑期实习招聘已经进入到白热化阶段,近期收到了很多同学关于求职问题的咨询,所以开一场公益直播来为大家答疑解惑 主题:校招测试开发求职如何准备&职业发展 时间&#xff1…

十二、MySQL 主从复制+高可用+读写分离

目录 一、mysqlkeeplived实现高可用LVS负载均衡 一、什么是高可用 二、为什么要用高可用 三、高可用的作用 四、keeplived 是什么?它用在哪里 五、安装mysql以及配置主从 六、keepalived安装 1、配置 单VIP 实现高可用 master上配置 2、backup上的配置 3、…

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法,但是N太大了,第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s,在这里要能想到开一个数组来求前n个石头的总重,然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

@EnableConfigurationProperties注解使用

前言 当我们想把配置的内容,动态赋值到某个配置类上的时候,可以使用EnableConfigurationProperties ConfigurationProperties注解 代码准备 创建配置文件prop.properties nameada age18 email123qq.com 创建配置类 ComponentScan("com.test.pops") PropertySo…

天地一体化5G网络中LNA的辐射效应

Youssouf A S, Habaebi M H, Hasbullah N F. The radiation effect on low noise amplifier implemented in the space-aerial–terrestrial integrated 5G networks[J]. IEEE Access, 2021, 9: 46641-46651. 图2 面向卫星的5G综合网络架构方案 这篇论文《The Radiation Effect…

docker快速安装达梦数据库

docker快速安装达梦数据库 文章目录 docker快速安装达梦数据库前言环境准备下载镜像运行、配置容器 前言 因为公司需要将自己的底代码平台与客户的需求做适配,客户要求必须满足信创要求,使用达梦数据库。所以需要将原有的MySQL数据库与达梦数据库适配&a…

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口; window系统运行输入cmd打开的指令窗口; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

面试笔记——Redis(集群方案:主从复制、哨兵模式和分片集群)

主从复制 在 Redis 主从集群中,一个主节点(Master)负责处理客户端的读写请求,而多个从节点(Slave)则负责复制主节点的数据,并对外提供读取服务——解决高并发问题。 主节点(Master&…

vue@2.7.16 使用less、less-loader

遇到问题,npm install less-loader7.3.0 --save安装好less-loader后,执行npm run serve 项目运行不起来,排查后发现在安装less-loader后就提示需要安装less,正确的安装应如下: npm install less less-loader7.3.0 --sa…

了解电子元器件商城价格变动的背后逻辑

电子元器件商城价格的变动背后存在着多种逻辑和因素,这些因素相互交织、相互作用,共同影响着价格的波动。以下是一些可能存在的背后逻辑: 供需关系: 供应量变化:电子元器件市场的供应量受到供应商生产能力、原材料供应…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

[隐私计算实训营学习笔记] 第1讲 数据要素流通

信任四基石 数据的分级分类 技术信任:全链路审计、闭环完成的数据可信流通体系 技术信任:开启数据密态时代 数据可流通的基础设施:密态天空计算

第3章 数据治理

思维导图 数据治理的定义:是在管理数据资产过程中行使权力和管控,包括计划、监控、和实施。 职能:指导所有其他数据管理领域的活动。目的:确保根据数据管理制度和最佳实践正确地管理数据。整体驱动力:确保组织可以从其…