session是什么?它与cookie有什么关系?

news2024/12/28 10:39:21

session是什么?

Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力

session和cookie一样,都是用来记录web服务器和客户端通信状态的机制,session和cookie不同的是,session是保存在服务器上的,session会在用户第一次访问服务器时建立,它相当于一个放在服务器上的用户的“备份档案”,一般与cookie一起使用。

session机制

每次我们访问一个页面,如果有开启session,就会自动生成一个session_id 来标注是这次会话的唯一ID,同时也会自动往cookie里写入一个名字为PHPSESSID的变量,它的值正是session_id,当这次会话没结束,再次访问的时候,服务器会去读取这个PHPSESSID的cookie是否有值有没过期,如果能够读取到,则继续用这个session_id,如果没有,就会新生成一个session_id,同时生成PHPSESSID这个cookie。由于默认生成的这个PHPSESSID cookie是会话,也就是说关闭浏览器就会过期掉,所以,下次重新浏览时,会重新生成一个session_id。

为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

在客户端第一次访问web服务器时,如果开启了session服务,服务器就会生成一个session_id作为用户的唯一标识,然后将session_id发送给cookie。session_id是一串无规律且唯一的字符串,每个用户都会生成一个标识。

当用户再次访问服务器且会话未结束时,服务器只需要从该Session中查找该客户的状态就可以了。

session和cookie

虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

当允许浏览器使用cookie的时候,session就会依赖于cookies,当浏览器不支持cookie后,就可以通过第二种方式获取session内存中的数据资源。

session是保存在服务器上的,但由于http协议是无状态的,服务器不能借助session来辨别用户的身份,所以服务器需要注入一个叫sessionID的变量给cookie,然后客户端会带着这个ID去请求服务器,服务器会在内存中查找用户的session,来快速识别用户的状态。

当会话断开后,sessionID就会过期,直到再次建立会话后重新生成,这是因为session是保存在服务器的内存中的,为了降低服务器的压力,session的生存周期一般比cookie短。

在这里插入图片描述

session和URL重写

URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写。

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

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

相关文章

AspectCore和MSDI 实现Name注册以及解析对象

AspectCore 在注册服务这块比较简单,默认是无法根据Name去注册和解析对象,这边做一下这块的扩展 大致原理是根据自定义Name去生成对应的动态类型,然后使用委托或者对象的方式,进行注册 tips:由于底层原理的原因,无法…

JavaWeb 速通JSP

目录 一、JSP快速入门 1.基本介绍 : 2.运行原理 : 二、JSP语法 1.page指令 : 2.声明脚本 : 3.表达式脚本 : 4.Java代码脚本 : 5.JSP注释 : 三、JSP对象 1.九大内置对象 : 2.四大域对象 : 1 基本介绍 2 应用实例 3.关于请求转发标签 : 一、JSP快速入门 1.基本介绍 …

用友-NC-Cloud远程代码执行漏洞[2023-HW]

用友-NC-Cloud远程代码执行漏洞[2023-HW] 一、漏洞介绍二、资产搜索三、漏洞复现PoC小龙POC检测脚本: 四、修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#…

KafkaStream:Springboot中集成

1、在kafka-demo中创建配置类 配置kafka参数 package com.heima.kafkademo.config;import lombok.Data; import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.streams.StreamsConfig; import org.springframework.boot.context.properties.Configu…

基于grpc从零开始搭建一个准生产分布式应用(2) - 工程构建

开始本章之前默认读者已经配置好了以下环境:Intellij IDEA 2022.1.2、JDK 1.8.0_144、Maven 3,另外也建议大家在一些免费代码托管平台开个帐号,这样就可以免费使用git做版本处理了,笔者自己私人使用的是阿里云的云效平台。因为此专…

【Lua基础入门】解密世界上最快的脚本语言

文章目录 前言一、Lua简介二、Lua功能三、安装LuaUbuntu LinuxWindows安装Lua 四、第一个Lua程序总结 前言 Lua是一种轻量级、快速且可嵌入的脚本语言,广泛应用于游戏开发、嵌入式系统、脚本扩展等领域。它的设计目标是简单、高效、可定制和易于集成。本文将介绍Lu…

射频入门知识-1

信号源 示波器 综合测试仪 功率计 噪声测试仪 频谱分析仪 频谱分析仪: 放大器的噪声系数测试 放大器增益测试 噪声和增益是放大器的最关键指标,学学怎么用频谱仪做放大器的噪声测试 那个 hbf740 输入和输出阻抗匹配具体怎么搞 《ADS2011射频电路设计与…

iOS Epub阅读器改造记录

六个月前在这个YHEpubDemo阅读器的基础上做了一些优化,这里做一下记录。 1.首行缩进修复 由于分页的存在,新的一页的首行可能是新的一行,则应该缩进;也可能是前面一页段落的延续,这时候不应该缩进。YHEpubDemo基于XDS…

Cenos7 搭建Minio集群部署服务器(一)

------> 道 | 法 | 术 | 器 | 势 <------ 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) 企业级开源对象存储(看看官网吹的牛B) 开源为云提供动力。开源为企业提供动力。开源为 MinIO 提供支持。每天都有成千上万的客户和社区成员信任 Mi…

Spring Boot @Validated 验证注解的使用

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式&#xff0c;需要在controller类上面添…

cf暑假训练 1700-1800 day1

cf暑假训练 1700-1800 day1 1852B Imbalanced Arrays1850H. The Third Letter1833G Ksyusha and Chinchilla1833F Ira and Flamenco&#xff08;补完线段树来看&#xff09;1809D Binary String Sorting1780D Bit Guessing Game&#xff08;这题真的好难&#xff0c;我只能说我…

yolov5、YOLOv7、YOLOv8改进:注意力机制CA

论文题目&#xff1a;《Coordinate Attention for Efficient Mobile NetWork Design》论文地址&#xff1a; https://arxiv.org/pdf/2103.02907.pdf 本文中&#xff0c;作者通过将位置信息嵌入到通道注意力中提出了一种新颖的移动网络注意力机制&#xff0c;将其称为“Coordin…

msvcp120.dll丢失的解决方法?分享三种常见解决方法

msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C Redistributable包中的一个组成部分。它是用于支持C编程语言的运行时库文件之一。它包含了许多标准库函数、容器类、算法和其他与C语言相关的功能。这些功能包括内存管理、字符串处理、数学计算、文件操作…

每日一题 206反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

浅谈XML配置实现逻辑

XML简介 什么是XML&#xff1f; xml是可扩展的标记语言 XML的作用 主要作用&#xff1a; 1.用来保存数据&#xff0c;而且这些数据具有自我描述性 2.他可以作为项目或者模块的配置文件 3.还可以作为网络传输数据的格式&#xff08;现在JSON为主&#xff09; 第一个实例 命…

计算机组成原理-笔记-汇总

&#x1f4da; 前言 本人在备考408&#xff0c;王道讲得的确不错&#xff0c;本人之前也看过哈工大【刘宏伟老师】的课&#xff0c;两者对比下来。 王道——更加基础&#xff0c;对小白更加友好哈工大——偏实践偏硬件&#xff08;会将更多的代码硬件设计&#xff09; PS&#…

SpringBoot2-Tomcat部署

1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码&#xff0c;用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…

什么是CSS中的渐变(gradient)?如何使用CSS创建线性渐变和径向渐变?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 渐变&#xff08;Gradient&#xff09;在CSS中的应用⭐ 线性渐变&#xff08;Linear Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 径向渐变&#xff08;Radial Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 写…

Kotlin和Java互操作时的可空性

注&#xff1a;文中demo的kt版本是1.7.10 一、kotlin语言中的可空性设计 在Java语言中的NPE&#xff08;NullPointerException&#xff09;可以说非常常见&#xff0c;而且诟病已久。 kotlin做为后起之秀&#xff0c;在空指针的问题上进行了升级&#xff0c;即&#xff1…

day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78

文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…