Tomcat深入浅出——Session与Cookie

【3D目标检测】MMdetection3d——搭建IS-Fusion环境+nuScenes数据集训练 搭建IS-Fusion环境+nuScenes数据集训练 阅读详情

一、Cookie

1.1 Cookie概念

Cookie:有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

1.2 为什么要使用Cookie

Cookie原理:当客户端去访问使用了cookie的服务器时,服务器会生成一份cookie发送到客户端,客户端会把这个数据保存起来,然后这样下次使用时,服务器就可以通过cookie知道是哪个客户端了。

  • 首先我们要了解HTTP是无状态的,所以我们需要使用cookie和session机制。Cookie翻译为曲奇小饼干,所以它非常的小,不超过4k。
  • 当我们在多个页面都需要同一个数据时,我们的web程序无法将信息记录下来,所以导致了我们每次都需要从服务器重新的去请求数据,这就导致了我们重复的干一个工作,所以就引出了cookie这个概念。

  • 可以了解到cookie只支持字符串形式

1.3 Cookie常用方法

  • cookie.setMaxAge(0); 此方法用来设置cookie时间

    • 当值 等于 0时,意味着删除cookie
    • 当值 大于 0时,意味着cookie的存活时间,会将浏览器 数据存在本地的硬盘 中。
    • 当值 小于 0时,表示存储在浏览器的内存中, 并不存储到硬盘中 ,和没调用一样
  • cookie1.setPath(req.getContextPath()); 设置访问路径

    -浏览器访问这个路径,一定要带cookie才行

  • Cookie cookie1 = new Cookie("username",username); 设置cookie对象存储账号

1.4 Cookie实现的应用

  • 我们可以通过设置cookie,将用户的账号密码存储在本地硬盘中,来设置10天内免登录。但是cookie并不安全
  • 京东在未登录的情况下,向购物车添加商品,然后关闭浏览器,再次打开浏览器时候,购物车的东西还在,将购物车的商品编号放到cookie当中,而cookie保存在硬盘文件当中。
  • 像我们浏览器中的记住密码、或者访问B站大学登陆一次以后下次就不用登录了,这些都是利用了cookie机制

二、Session

2.1 Session原理

  • 在web服务器中有一个session列表。类似于map集合。这个map集合的key存储的是session ID。

  • 这个map集合的value存储的是对应的session对象

  • 用户发送第一次请求的时候:服务器会创建一个新的session对象,同时给session对象生成一个id,然后web服务器会将session的id发送给浏览器,浏览器将session的id保存在浏览器的缓存中

  • 用户发送第二次请求的时候:会自动将浏览器缓存中的sessionID 自动发送给服务器,服务器获取到session ID,然后从session列表中查找到对应的session对象

  • 因为session是存放于 服务器 中的,这也是它和cookie的区别。

  • JSESSION=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的,浏览器只要关闭,这个cookie就没有了

2.2你以为session真的销毁了吗?

1.为什么我们每次关闭了浏览器,会话就结束了?

  • 关闭浏览器之后,浏览器中保存的sessionID消失,下次重新打开浏览器之后,浏览器缓存中没有这个sessionID,自然找不到服务器中对应的session对象,session对象找不到等同于会话结束!!!
  • 但是我们可以不关闭浏览器,而是直接关闭服务器,这样你会发现虽然他们都用同样的sessionId,但是仍然找不到服务器中对应的session对象,这就要了解一下session的 钝化 和 活化 了。

2.session销毁的方式

session.invalidate()
session.setMaxInactiveInterval()

3.session实现原理:

  1. JSESSION=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的,浏览器只要关闭,这个cookie就没有了
  2. session列表是一个Map,map的key是session,map的value是session对象
  3. 用户第一次请求:服务器生成session对象,同时生成id,将id发给浏览器
  4. 用户第二次请求:自动将浏览器内存中的id发送给服务器,服务器根据id查找到cookie对象
  5. 关闭浏览器,内存消失,cookie消失,会话等同于结束!

2.3 session常用方法与应用场景

HttpSession session = req.getSession();
session.setAttribute("user",person);
//设置session销毁时间
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
  • 我们可以通过session进行判断用户是否登录,如果已经注销了登录,则通过判断session是否存在,控制用户是否能够访问某些界面。

三、Session的钝化和活化

我们知道session是将信息存储到服务器里的,但是为什么我们每次关闭浏览器再打开,却拿不到存在浏览器里的数据呢,这就需要我们了解一下如何 钝化 与 活化 。

钝化:当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的这个目录下,这个过程叫做Session 的钝化。

活化:当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象,这个过程叫做Session的活化。

  • 实现session钝化和活化,它的pojo类必须实现 Serializable 接口,同时也可以实现一个 HttpSessionActivationListener 监听Session行为的接口。
public class Person implements Serializable, HttpSessionActivationListener {
    private static final long serialVersionUID = 1L;
    private String name;
    private Integer age;
    
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
      
        System.out.println("会话将被钝化,数据保存到硬盘");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        System.out.println("会话被活化,数据从硬盘中取出来了");
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 我们分别设置两个Servlet类,一个用来放session信息,一个用来取session信息
//用来存储session信息
@WebServlet("/sessionTest")
public class SessionTest extends HttpServlet{
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        Person person = new Person();
        person.setName("lx");
        person.setAge(20);
        session.setAttribute("user",person);
    }
}
//用来拿到session信息
@WebServlet("/sessionTest01")
public class SessionTest01 extends HttpServlet{
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        Person user =(Person) session.getAttribute("user");
        System.out.println(user.getName());
        System.out.println(user.getAge());
    }
}

最后一步,配置文件:

  • 在我们的Tomcat目录下的conf中的context.xml添加如下信息

  • 下面让我们来测试一下

四、cookie和session区别

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复) 本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。 阅读详情

相关推荐

C# WinForms 多语种切换实现:打造国际化应用程序

合理实现多语种切换功能可以显著提升应用程序的国际化水平。模块化设计:将本地化逻辑模块化,便于管理和维护。异常处理:始终捕获和处理可能的异常,确保程序的健壮性。资源管理:合理管理资源文件,避免重复和遗漏。测试:在不同语言环境下进行全面测试,确保所有字符串都能正确显示。文档和注释:为关键代码添加详细的文档和注释,便于后续维护。

墨夶的博客 1663

Tomcat Request Cookie 丢失问题

告警,告警后发到工作群中,但是相关开发人员告知自己能够正常访问,没有问题,因为正好周五,自己觉得偶发性肯定和并发相关,所以周末研究了下代码,发现和。请求的类,包含了请求的所有详细信息。该类提供了许多方法来访问和操作请求的各个部分,例如请求头、请求参数、输入流等。(涉及到多线程处理)出现"前端传递`Cookie为空"的告警,导致前端请求丢失,出现请求失败问题。方法),以清除上一次请求的状态,使其可以安全地用于下一个请求。【3】异常处理:在处理请求的过程中,如果发生异常,的时候发现为空,本次请求直接被中止。

程序猿进阶 3055

YOLOv11改进 | 主干/Backbone篇 | 华为最新目标检测网络VanillaNet(适配yolov11的N、S、M、L、X)

本文给大家来的改进机制是华为最新VanillaNet网络VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是该网络结构的通道数会被放大,GFLOPs的量会很高)。我将其替换整个YOLOv10的Backbone,在一些大目标和小目标检测上均有涨点,效果比上一篇RepViT的效果要好。

Snu77的博客 2521

tomcat 服务器下的cookie 实现 详解

cookie 的作用,就是当一个浏览器通过http 请求访问一个服务器时,这个服务器会返回key/value 键值对给客户端浏览器,在servlet 中可以这样增加cookietomcat的 版本是7   public void addcookies(HttpServletResponse response,String key,String value){ Cookie cook...

lliang54的博客 2207

Tomcat-Cookie

1、What: Cookie是Web会话跟踪中的一种技术,其中还要Session,URL重写。 Cookie是将服务器中的一小部分加密后的用户信息放到浏览器的缓存中,Cookie最大的存储为4kb 2、How 创建Cookie的方式有: 1、通过构造器,并在通过response.addCookie(Cookie cookie)方法设置到响应头中 Cookie cookie=new C...

frameworker的博客 1646

JavaWeb Tomcat (八)SessionCookie

第八章 SessionCookieSession 会话域Session的创建过程会话超时机制Session的销毁:设置会话超时时间Cookie禁用后怎么使用Session(没用的知识)Session的常用方法Cookie作用创建Cookie设置Cookie 路径设置Cookie 生命时间响应给浏览器Cookie获取浏览器的Cookie Session 会话域 作用:服务器识别用户并保持用户信息在一次访问中的连续性。一次:session失效 域 request session applicati

YUELEI118的博客 627

tomcat server.xml文件cookie设置常见

问题描述:同一台服务器下面,部署了两个tomcat服务,或者代理后两个相同域名端口不通的服务。第一个服务登陆后设置了cookie,如果是用同一个浏览器打开,则第二个服务登录重新设置了cookie,在回到第一个服务随便点击发现重定向到了登录页。 原因: 我们一般设置的接口的权限,通过前端设置cookie,对应上后端session,校验是否已经登录从而实现接口监听的放行。在同一个域名下,如果tomcat是默认设置,会在前端生成相同cookie名称为JSESSIONID的内容,如果同一个域名下的第二个服务也在当

weisian的博客 1903

Tomcat深入浅出——SessionCookie(四)

本文介绍了TomcatCookieSession二者的区别、应用场景、常用方法、以及Session的钝化活化

weixin_63597125的博客 850

面试官:不用背概念,说清楚cookiesession是怎么交互的?

     前言   共分为10个章节   1.Java基础 2.网络 3.Java并发 4.JVM和JMM 5.数据库   6.设计模式 7.Linux 8.框架 9.算法 10.工程   本小节属于Java基础   介绍   这次先分享单机session,一定用大白话分享清楚,不扯概念。因为我原来面试别人的时候也问这个。被概念的人还是人还是很多的。   Http协议使用的是无状态连接,这样会造成什么问题呢?看如下Demo      测试         Htt..

iqifenxia的博客 175

javaweb

动态web流程

java后端攻城狮 725

JAVAweb基本概念 IDEA创建Maven项目,maven配置web.xml,请求转发重定向,cookie session概念,jsp概念表达式,监听器,过滤器概念

一、基本概念 ——动态页面和静态页面—— 示例:eShop静态动态示例 静态页面(例如公司的门户网站),不需要用户交互,页面内容不能变化的 动态页面(例如12306购票),需要用户交互、页面内容会发生变化的 静态页面: >页面内容不会发生变化(除非修改了页面代码) >不能实现和浏览网页的用户之间进行交互 动态页面: >动态页面以数据库技术为基础,可以根据用户的需求从数据库中获取特定的数据 >能够用户交互(例如登录、注册、商品搜索...) &gt.

CSDN_429的博客 1155

JavaWeb-狂神系列

JavaWeb Java Web //解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8");//等于---> resp.setHeader("Content-type","text/html;charset=UTF-8"); 1、基本概念 1.1、 前言

zqq_sicnu的博客 4426

JavaWeb学习笔记

JAVA WEB学习笔记

sxsl_lwp的博客 6743

视频教程-Java Web之Servlet开发-Java

Java Web之Servlet开发 1999年开始从事开发工作,具备十余年...

weixin_33992480的博客 61

JavaWeb基础知识总结概述

目录一.Web应用服务器Http协议(1)Web概述(2)Tomcat概述(3)Http协议二.JavaWeb三大组件概述(1)Servlet(2)Filter(3)Listener三.Request&Response(1)Request概述(2)Response概述四.会话技术(1)Cookie(2)Session五.JSP&EL&JSTL概述六.数据库(1)概述(2)...

m0_46550452的博客 3972

Javaweb

JavaWeb 1、基本概念 1.1、前言 web开发: web,网页的意思,www.caidu.com 静态web HTML,css 提供给所有人开的数据始终不会发生变化! 动态web 淘宝,几乎所有的网站; 提供给所有人开的数据始终会发生变化! 技术栈:Servlet/JSP,ASP ,PHP 在java中,动态web资源开发的技术统称为JavaWeb; 1.2、web应用程序 什么是程序:按照自己编写的代码去执行的动作 web应用程序:可以提供浏览器访问的程序; a.html、b.

weixin_52093131的博客 2173

配置一个Tomcat服务器中多个web项目的cookie共享

Cookie的共享问题,配置一个Tomcat服务器中多个web项目的cookie共享,多个服务器的cookie共享?

记录分享编程与冲浪知识 869

Tomcat中使用cookie

Tomcat中使用cookie cookie是用来处理客户端发送不同请求的时候如何使用相同的参数信息 cookie的使用 创建cookie对象 Cookie cookie = new Cookie(“name”, name); 在response对象中添加cookie response.addCookie(cookie); cookie设置生命周期,单位是秒:cookie.setMaxAge(3243600); 给cookie设置固定路径(只有在请求设置的路径才发送响应的cookie) 获取coo

yy310585的博客 1611

tomcat session cookie值设置逻辑

tomcat session cookie 值设置,tomcat jsessionid设置。##调用request.getSession()##请求中没有获取到jsessionid,新建值。##reponse header写回客户端。##设置到response header。

u014200244的专栏 717

Tomcat你应该知道的会话及其会话技术(cookie对象,session对象)

会话及其会话技术 会话概述 (1)客户端请求Web服务器时,针对每次HTTP请求,Web服务器都会创建一个utpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是五个不同的请求,因此,在发送结账请求时,之前购买请求中的数据将会丢失。 (2)使用ServletContext对象保存数据时,由于同个 Web应用共享的是同一个SnietContext 对象,因此,当用户在发送结账请求时,由于无法区分哪些商品是哪个用所购买的,而会将该购物网站中所有用户购买的商品进行结算.这显然

xiao_yan_的博客 1011

Tomcat中的Cookie配置详解:安全性能优化

你是否曾遇到过用户登录状态频繁失效、敏感信息泄露或网站加载缓慢的问题?在Java Web应用中,这些问题往往Cookie配置不当密切相关。作为最常用的Java Web服务器之一,Tomcat提供了强大的Cookie管理功能,但大多数开发者仅停留在默认配置层面,未能充分利用其安全特性和性能优化潜力。 本文将系统讲解TomcatCookie的配置方法,通过**30+代码示例**和**5个实战场景...

gitblog_00616的博客 631

服务器温习笔记(三)TomcatCookie&Session

会话技术 一次会话: 浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。 会话: 一次会话中包含多次请求和响应。 功能:在一次会话的范围内的多次请求之间实现数据共享 方式: 1.客户端会话技:Cookie 2. 服务器端会话技术: Session Cookie Cookie是客户端会话技术,可以将将数据保存到客户端。 使用步骤 创建Cookie对象,绑定数据 new Cookie(String name, String value) 发送Cookie对象 response.addC

xueshanfeitian的博客 488

多商户电商系统

【多商户电商系统说明】1.安信电商系统,开发语言有ASP版本和PHP版本,本程序安装包为PHP多商户电商系统免费版本。2.安信多商户电商系统(ASP版本)[38套各行业模版]下载地址:http://www.anxin66.com/product/index_2.html3.安信单商户电商系统(ASP版本)[54套各行业模版]下载地址:http://www.anxin66.com/product/index_1.html4.安信多商户电商系统(PHP版本)[30套各行业模版]下载地址:http://www.anxin66.com/product/index_11.html5.安信单商户电商系统(PHP版本)[30套各行业模版]下载地址:http://www.anxin66.com/product/index_12.html

基于单片机的防酒驾系统设计(仿真+电路+程序)(51+1602+MQ3+AD0832+24C02+JK+KEY5)#0425

包括:源程序工程文件、Proteus仿真工程文件、电路原理图文件、配套技术手册、论文资料等1、采用51/52单片机(通用)作为主控芯片;2、采用MQ3传感器+AD0832检测酒精浓度;3、采用1602液晶显示:当前浓度、报警值设置;4、当检测到浓度超过“酒驾”报警值时,红灯亮;5、当检测到浓度超过“醉驾”报警值时,红灯亮同时蜂鸣器启动;6、可通过按键对报警值进行设置;7、可通过按键保存当前检测到的浓度值,之后可对保存值进行查询。

上一篇: Spring 核心概念
下一篇: MySQL查询为什么没走索引?这篇文章带你全面解析
JavaShark
博客等级 码龄4年 180粉丝 438原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值