Session详解,学习Session(包含底层分析和使用)

news2024/11/15 21:57:20

什么是session

session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。

session和cookie的比较

cookie保存在客户端,session保存在服务端

cookie作用于他所表示的path中(url中要包含path),范围较小。session代表客户端和服务器的一次会话过程,web页面跳转时也可以共享数据,范围是本次会话,客户端关闭也不会消失。会持续到我们设置的session生命周期结束(默认30min)

我们使用session需要cookie的配合。cookie用来携带JSESSIONID

cookie存放的数据量较小,session可以存储更多的信息。

cookie由于存放在客服端,相对于session更不安全

由于session是存放于服务器的,当有很多客户端访问时,肯定会产生大量的session,这些session会对服务端的性能造成影响。

session有什么用

我们先来想一个问题,这个问题就是我们在游览购物网站时,我们并没有登录,但是我们任然可以将商品加入购物车,并且进行查看,当我们退出游览器后再打开游览器进行查看时,购物车中依然有我们选择的商品,这该怎么实现呢?

当然,我们可以使用cookie,但是cookie能存放大量数据吗?这时,我们就需要一种新的技术,Session。session是存储于服务器端的特殊对象,服务器会为每一个游览器(客户端)创建一个唯一的session。这个session是服务器端共享,每个游览器(客户端)独享的。我们可以在session存储数据,实现数据共享。

工作原理图

session的存储形式

session类似于一个Map,里面可以存放多个键值对,是以key-value进行存放的。key必须是一个字符串,value是一个对象。

session底层实现机制

session是每一个游览器(客户端)所唯一的,这个是怎么实现的呢?其实,在访问一个网站时,在HTTP请求中往往会携带一个cookie,这个cookie的名字是JSESSIONID,这个JSESSIONID表示的就是session的id,这个是由服务器创建的,并且是唯一的。服务器在使用session时,会根据JSESSIONID来进行不同操作。

当我们在服务端使用session时,首先要获取session,这个session是通过JSESSIONID进行获取。当然,这时就已经有好多种情况了。例如游览器访问时没有携带JSESSIONID,游览器携带的JSESSIONID对应的session不存在(或者失效)等情况。上面这个图就对服务器获取session的一些情况进行了说明。

session常用方法

resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session

setAttribute(String s, Object o):在session存放属性

getAttribute(String s):从session中得到s所对应的属性

removeAttribute(String s):从session中删除s对应的属性

getId():得到session所对应的id

invalidate():使session立即无效

setMaxInactiveInterval(int i):设置session最大的有效时间。注意,这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,那么这个session就失效了。

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

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

相关文章

2023企业在媒体邀约的过程中应该注意哪些细节

很多企业在发展壮大之后,都会成立自己的品牌公关部,来进行日常公关的维护工作,这就需要邀请大量的媒体资源和媒体人脉来进行邀约,企业通常会邀请那些服务好、资深的媒介机构,进行明确的分工,从而完成每一场…

廉颇未老,VB语言迎来春天,中文编程也绝处逢生

“VB语言过时了,早就淘汰了”,不少程序员认为,如今VB上不了台面。颠覆许多人认知的是,VB(Visual Basic)作为微软“亲儿子”,借助微软平台在全球用户中仍有着稳固地位,是被大家看轻的…

技术分享 | Redis 之分布式锁

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 引言&#xff1a…

Redis事务

Redis事务官网: http://redis.cn/topics/transactions.html 一、Redis事务的特性 Redis事务可以一次执行多个命令,并且满足以下两个重要的特性 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&a…

CSS3 calc()函数

CSS3 calc()函数 概述 在CSS3中,我们可以使用calc()函数通过“计算”的方式来定义某一个属性的取值。 使用 语法 属性: calc(表达式);说明 可以使用calc()函数计算元素的width、margin、padding、font-size等。 对于calc()函数,有以下5条运算规则…

我的第一个基于vue-cli的程序

文章目录一 准备环境1.1 node.js安装1.2 安装Vue工具(Vue CLI)第一种安装方式【可能会遇到失败,如果失败请尝试第二种方式】下载的文件的存放位置第二种安装方式安装cnpm二 操作步骤2.0 进行目标文件夹下的命令行窗口2.1 创建项目2.2 成功2.3 运行项目2.4 效果一 准…

力扣1700.无法吃午餐的学生数量

题目描述: 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#xff…

戴尔成就300015电脑出现错误代码怎么重新安装系统?

戴尔成就300015电脑出现错误代码怎么重新安装系统?有用户使用这款戴尔成就300015电脑的时候,总是在使用过程中无故的冒出错误代码,导致系统崩溃了。那么这个情况怎么去进行问题的修复呢?一起来看看详细的解决方法分享吧。 准备工作…

【深度学习】如何封装可维护的restiful api

这篇文章是用一个案例的形式尝试解决字段入参多了,在python这种风格的语言下如何维护的问题! 文章目录前言1. json 是个好东西2. json 是个坏东西3. json维护数据的适用范围总结4.解决4.1 基础版4.2 进阶版4.2.1 行动4.2.2 精进4.3 另一种选择总结前言 …

立根铸魂 崛起数智时代 GBASE受邀出席操作系统产业峰会2022

2022年12月28日,由openEuler开源社区发起举办的操作系统产业峰会2022/openEuler Summit 2022正式召开。GBASE荣幸受邀参加统信软件“深耕数字化”主题论坛,分享GBase 8c基于鲲鹏生态的创新实践历程和经验。 操作系统产业峰会2022 -南大通用GBase 8c基于鲲…

使用Nordic的nrf52832控制指定从机(一主多从)

一主多从1. 想要实现的功能2. 从机3. 主机3.1 主从机连接个数设置3.2 扫描过滤3.3 连接和断开连接3.4 按键处理3.5 从机读写3.5.1 写3.5.1 读4运行效果1. 想要实现的功能 1.主机能连接多个从机(主机作为控制器,从机作为节点)。 2.主机能使用…

Java跨域问题

目录 1、跨域问题说明 ​2、跨域解决方案 2.1、局部跨域解决方案 2.1.1、CrossOrigin注解跨域 2.1.2、手动设置响应头 2.2、全局跨域解决方案 2.2.1、实现WebMvcConfigurer接口设置跨域 2.2.2、定义CorsFilter Bean实现跨域 2.2.3、重写ResponseBodyAdvice接口中的bef…

ros的launch文件知识

_node标签: 在指定机器上启动节点respawn"true|false"(可选) 如果节点退出,是否自动重启respawndelay"N"(可选) 如果 respawn 为 true,那么延迟N秒后启动节点required"true|false"(可选) 该节点是否必须,如果…

ZooKeeper 避坑实践:SnapCount 设置不合理导致磁盘爆满,服务不可用

作者:子葵 背景 在 ZooKeeper 的日常使用过程中,一个令人头疼的问题就是节点的磁盘容量问题,如果由于过大的 TPS 或者不适当的清理策略会导致集群中数据文件,日志文件的堆积,最终导致磁盘爆满,Server 宕机…

在线客服系统部署配置邮箱消息通知功能 - 唯一客服(v1kf.com) -开源私有化独立部署在线客服系统源码...

为在线客服系统设置邮件通知具有以下几个好处: 改善客户体验:邮件通知可以让客户实时收到新消息或更新通知,这有助于提高他们对您的服务的整体体验。 提高效率:邮件通知可以帮助提高客服团队的效率,因为它们会在新消息…

非专业人士如何完成数据采集?纯干货,一文看懂

写在前面: 本教程能够解决大部分人的数据采集及分析需求,实用、简单,尤其适合Excel大户、办公族、业务人员,或者不会编程、不懂数据分析理论的技术小白…… 来不及看的可以先点赞收藏! 01 点对点的采集:…

吴恩达《机器学习》——欠拟合与过拟合

欠拟合与过拟合1. 方差与偏差模型的容量、过拟合和欠拟合2. Python代码实践2.1 拟合直线2.2 拟合多项式数据集、源文件可以在Github项目中获得 链接: https://github.com/Raymond-Yang-2001/AndrewNg-Machine-Learing-Homework 1. 方差与偏差 在数学上,估计的偏差…

Java基础漏洞(二)

继续填补自己的知识漏洞 1.&、&&、|、||之间的区别 &是逻辑与,而&&则是短路与。&和&&之间的区别是,在短路与&&的情况下,两个条件当第一个条件为假时,则不再执行第二个条件&#xf…

java学习之类方法

目录 一、基本介绍 二、类方法的调用 三、类方法的应用实例 代码 内存分析 运行结果 四、类方法的经典使用场景 五、类方法使用细节 第一条 第二条 第三条 第四条 第五条 第六条 六、练习 第一题 考察点 分析 结果 第二题 代码 考察点 结果 第三题 类方法 …

LeetCode498. 对角线遍历

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例1 输入:mat [[1,2,3],[4,5,6],[…