Session的使用

news2024/11/24 6:37:52

Session的使用

  • Session概述
  • Session特性
  • Session原理
  • Session对象操作
      • 获取Session对象-----getSession
      • 获取SessionID------getId
      • 向Session对象存储/修改数据-----setAttribute
      • 获取数据------getAttribute
      • 删除数据----removeAttribute
  • Session对象失效

Session概述

Session对象,就是当浏览器向服务器发送请求建立连接后,由服务器创建的存储在服务器端的用于记录用户状态对象。

Session特性

  • 服务器会为每个客户端连接分配一个Session对象,存储在服务器上;
  • 同一个浏览器发送多次请求,同属于一次会话,共享同一个Session对象;

Session原理

在这里插入图片描述

Session原理:

  1. 当客户端浏览器(第一次)请求服务器时,服务器会为当前客户端连接创建一个Session对象,同时将sessionID通过Cookie响应给客户端,并存储在客户端;
  2. 当客户端端再次请求服务器的时候,会通过请求头携带存储sessionID的cookie,服务器接收请求之后获取cookie中的sessionID,通过这个sessionID获取第一次连接时创建Session对象。

Session对象操作

获取Session对象-----getSession

// session对象是 javax.servlet.http.HttpSession接口的对象
HttpSession session = req.getSession();

获取SessionID------getId

String sessionId = session.getId();

向Session对象存储/修改数据-----setAttribute

//session对象的底层就是一个map,可以存放多个键值对
//存储
session.setAttribute("key1","hello");
//修改
session.setAttribute("key1","hi");

获取数据------getAttribute

//从session对象中取数据,根据key获取value
String s1 = (String)session.getAttribute("key1");
System.out.println(s1);

删除数据----removeAttribute

//删除session中key1的键值对
session.removeAttribute("key1");

Session对象失效

一个客户端的多次请求正常情况下获取到的是同一个session对象,也是正式因为多次请求获取的是同一个session对象才实现了session中存储的用户状态可以作用于请求。

如果session失效,将会导致session失效的后的请求无法获取之前的session对象,也就是说多次请求获取的不是同一个session。

导致session失效的原因有2种:

  • 客户端禁用Cookie,或者客户端在两次请求之间清除了cookie,将导致下一次请求无法获取上一次请求创建的Cookie;
  • session是有生命周期的,当客户端请求服务器建立连接之后,服务器会为此会话创建session对象,如果客户端的两次请求时间间隔>session过期时间(默认30min),服务器会将之前创建的session对象销毁;

session失效解决方案:

  • 如果客户端禁用了Cookie:不能通过cookie来记录、传递sessionId, 我们可以通过重写URL,使用url传递sessionID(在url上追加sessionId)
  • 如果session过期:我们可以根据系统的需求灵活设置session的生命周期或者手动销毁session对象
//设置session对象的过期时间(单位:s)
//设置session过期时间10s:当客户端的两次请求时间>10s,session将会被销毁
session.setMaxInactiveInterval(10);

//手动销毁session对象
session.invalidate();

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

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

相关文章

rust编程-rust所有权理解(chapter 4.2 引用实质是借用)

目录 2. 引用与借用 2.1 可变(mutable)引用 2.2 悬空(dangling)引用 2.3 引用的规则总结 2. 引用与借用 上一章节中提到,所有权在函数调用中的转移,函数返回必须同时返还所有权,才能使函数调用后能继续使用某个变量…

[附源码]计算机毕业设计勤工助学管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

jquery 登录-记住密码

jquery 登录-记住密码在登录时,添加记住密码功能:用的 localStorage 存储和获取登录信息 //存储 var username $("input[nameusername]").val(); var password $("input[namepassword]").val(); var validateCode $("inpu…

自动驾驶:2022 apollo day 观后感(一)

2022 apollo day 观后感(一)注: ppt来自apollo day,结合ppt,讲述一些自己的想法,欢迎批评指正!Topic One -- 打造安全、智能、高效的自动驾驶技术体系(陈竞凯)无人驾驶技…

Ruby ERB模板注入检测

了解Ruby ERB模板注入,Ruby ERB模板注入检测。 ERB是Ruby自带的 <% 写逻辑脚本(Ruby语法) %><%= 直接输出变量值或运算结果 %>require erbtemplate = "text to be generated: <%= x %>" erb_object = ERB.new(template) x = 5 puts erb_object.r…

[附源码]JAVA毕业设计人才公寓管理系统(系统+LW)

[附源码]JAVA毕业设计人才公寓管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

Linux——Xshell、Xftp实现Linux远程登录与应用

目录 一、远程登录 1.1 SSH登录方式 二、Xshell远程连接 2.1 远程连接 2.2 设置粘贴复制 三、Xftp远程连接 3.1 远程连接 3.2 解决乱码 3.3 传输文件 一、远程登录 通常在工作过程中&#xff0c;公司中使用的真实服务器或者是云服务器&#xff0c;都不允许除运维人员 之…

微电网优化调度|农村农业区可再生能源微电网优化调度(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

软件测试就业现状分析,2023是卷还是润?

一、当前软件测试的现状是什么&#xff1f; 现状1、网络上大量人唱衰&#xff0c;测试就业不行了 2022年5月后&#xff0c;越来越多人网络发声“互联网行业不行了”。贴吧、知乎、小红书上&#xff0c;也有大量人反馈软件测试就业惨淡……&#xff0c;篇幅有限&#xff0c;仅…

Docker学习4-常用命令之重要的容器命令

本文是Docker学习系列教程中的第四篇。本文是Docker常用命令中的重要命令。为什么说重要呢&#xff1f;因为这些命令&#xff0c;在以后开发过程中&#xff0c;会经常使用到。比如&#xff1a;怎么查看容器中运行的日志&#xff1f;怎么查看容器运行的进程&#xff1f;怎么导出…

最新中文版本FLStudio21水果音乐软件更新下载

导读&#xff1a;昨晚Image-Line发布FL Studio 2023&#xff0c;而今年也是他们成立第23周年。FL21一经发行便引起了广大制作人的关注&#xff0c;今天我们来介绍一下这款软件。FL Studio是一款音乐编曲软件&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;也是我…

实战:Kind部署k8s集群-2022.12.6(成功测试)

写在前面 原文阅读效果更佳&#xff1a;实战&#xff1a;Kind部署k8s集群-2022.12.6(成功测试) 语雀 《实战&#xff1a;Kind部署k8s集群-2022.12.6(成功测试)》 Kind Kind 是 Kubernetes in Docker 的简写&#xff0c;是一个使用 Docker 容器作为 Node 节点&#xff0c;在…

通关算法题之 ⌈栈和队列⌋

栈和队列 155. 最小栈 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取…

文件系统实现

文件系统实现&#x1f3de;️1. 整体组织&#x1f301;2. 文件组织&#xff1a;inode&#x1f320;3. 多级索引&#x1f4d6;3.1 间接指针&#x1f4d6;3.2 多重间接指针&#x1f4d6;3.3 基于范围的方法&#x1f30c;4. 目录组织⛺5. 空闲空间管理&#x1f33f;6. 读取和写入文…

Vue 官方文档2.x教程学习笔记 1 基础 1.7 条件渲染

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.7 条件渲染1.7.1 v-if1.7.2 在\<template> 元素上使用 v-if条件渲染分组1.7.3 v-else1.7.4 v-else-if1.7.5 用 key 管理可复用的元素1.7.6 v-show1.7.7 v-if vs v-show1.7.8 v-if 与 v-for 一起…

小网SIM卡QMI拨号无法获取IPv6地址问题的分析

背景 客户反馈设备插小网卡驻网并加载qmi_wwan驱动后,使用多路拨号工具进行两路拨号,第一路无法获取IPv6地址,但是插现网卡测试是没有问题的。具体测试方法如下图: Check后只有第二路有PDN驻网请求,如下图,建议排查QMI拨号工具 分析流程 首先根据客户提供的方法对问…

day6_redis学习

文章目录关注和取关查看其他用户界面及共同关注关注推送关注和取关 因为关注用户的时候可能涉及到共同关注的对象&#xff0c;所以需要利用到交集&#xff0c;而在Redis中可以使用交集的&#xff0c;是Set以及ZSet数据结构&#xff0c;但是显然这里并不需要排序&#xff0c;所…

Java学习之多态二

目录 一、运用多态解决宠物喂食问题 原理分析 运行测试 运行结果 分析 增加宠物和食物种类 Pig类 Rice类 测试 运行结果 一、运用多态解决宠物喂食问题 改变Master类的feed方法的参数列表 package com.hspedu.poly_;public class Master {private String name;public…

基于机器学习之模型树短期负荷预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

Python 中的 Raincloud 图绘制

Python 中的 Raincloud 图 提示&#xff1a;一种强大的数据可视化方法&#xff0c;由小提琴图、散点图和箱线图的组合组成 提示&#xff1a;目录 Python 中的 Raincloud 图绘制Python 中的 Raincloud 图前言一、什么是 Raincloud 图&#xff1f;二、使用步骤1.加载数据集2.读入…