关于cookie和session的直观讲解(二)

2024-09-06 02:28
文章标签 讲解 session cookie 直观

本文主要是介绍关于cookie和session的直观讲解(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

上一章,讲解了Cookie,本章介绍Session.

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

Session

基础

  • 获取HttpSession对象:
    HttpSession session = request.getSession();

  • 使用HttpSession对象:
    Object getAttribute(String name) ;
    void setAttribute(String name, Object value);
    void removeAttribute(String name) ;

  • 原理:
    Session的实现是依赖于Cookie的,看案例。
    在这里插入图片描述
    在这里插入图片描述
    默认给设置了Cookie属性。
    同时,我们也可以看到,它在创建Cookie的时候,同时加上了path=/的设置,这就说明,在本项目下,不管访问哪个接口都能拿到Session。

    补充 HttpOnly说明:
    在这里插入图片描述
    另外,一定要注意,Cookie的创建不是在Session设置属性的时候才创建的,而是在获取Session的时候就创建了

     HttpSession session = request.getSession();//获取session,并返回自定义生成的cookie
    

细节

  • 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
    默认情况下。不是,原因是,当客户端浏览器关闭后,cookie就注销了,再打开浏览器去请求接口,客户端是没有携带Cookie的,所以请求什么都拿不到,后端在获取属性的时候,同时给前端返回一个新的Cookie。
    在这里插入图片描述
    那你可能有疑问,浏览器不关闭的时候,第一次请求设置session,返回了Cookie,第二次携带这个Cookie请求另一个获取Session的接口,也就是上边的接口,会不会产生一个新的Cookie呢?答案是不会的。
    在这里插入图片描述
    当然,如果你想让浏览器重新打开获取的session为同一个,也是可以的:
    可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。

    Cookie c = new Cookie("JSESSIONID",session.getId());
    c.setMaxAge(60*60);
    response.addCookie(c);
    
  • 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    不是同一个,但是如果你用的tomcat,当tomcat正常关闭的情况下,会自动帮你把session序列化到硬盘,之后服务端启动,再反序列化到内存中,这就是tomcat对session的钝化和活化机制。
    注意,如果你在idea中操作,那么这个钝化和活化机制也会有,但是再重启的时候,硬盘中整个缓存的session会被idea删除,所以就不会重新序列化

  • session什么时候被销毁?
    服务器关闭;
    session对象调用invalidate();
    session默认失效时间 30分钟;

    设置方法:
    在这里插入图片描述
    当然在这里也可以全局设置Cookie。
    如果是在tomcat里的话,我们可以到tomcat\conf\web.xml文件下,找到:

    <session-config><session-timeout>30</session-timeout>
    </session-config>
    

这篇关于关于cookie和session的直观讲解(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140741

相关文章

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQL连表查询之笛卡尔积查询的详细过程讲解

《MySQL连表查询之笛卡尔积查询的详细过程讲解》在使用MySQL或任何关系型数据库进行多表查询时,如果连接条件设置不当,就可能发生所谓的笛卡尔积现象,:本文主要介绍MySQL连表查询之笛卡尔积查... 目录一、笛卡尔积的数学本质二、mysql中的实现机制1. 显式语法2. 隐式语法3. 执行原理(以Nes

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析