【web】Session是什么又和cookie有啥关系

PHP中Cookie与Session的使用和管理 本文深入探讨了PHP中Cookie和Session的工作原理、使用场景以及优缺点。通过实例代码展示如何在PHP中设置和获取Cookie,以及如何使用Session保持用户状态。同时,文章也提到了Cookie和Session的一些限制,并介绍了一些替代方案,如自定义存储和结合Cookie与Session使用来优化用户体验。... 阅读详情

重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。

废话不多说,直接上正文。 本文更新不及时,请到原文地址查看:【web】Session是什么又和cookie有啥关系。

一、Session

无论你是Java作为后台,PHP作为后台,.Net 作为后台你都可以发现有一个方法可以获取Session这玩意儿。这或许就是你接触Session开始的地方。由于笔者本人对于Java更为熟悉,因此将在java基础上进行讲解,实际上原理都是一样的,不必担心存在隔阂。

1、Session是什么

Session是存在于服务器端的。 你千万不要想着Session在浏览器里,它在服务器端也是你能够在后端的程序里通过代码获取Session最好的证据。细心的你肯定发现了,前端js代码里根本就不会有获取Session相关的方法。

Session就是一个键值对容器。 是的,它没有你想象中的那么复杂,它就是让你从里面获取数据,或则你放数据在里面的一个容器。而这个容器只不过维护着自己独有的存活期。而通常情况下你不必关系这件事情。除非你有自己的功能实现需求在这一块上面。

2、Sesison干嘛的

你一定有过这样的经历,你打开某宝网站想要购物了,提示你登录,然后你就登录了。没过一会儿,你又不想买了,把浏览器也给关闭了。但是又过了一会儿,你再次打开某宝网站,你发现你上次登录的状态还在,并没有要你再一次进行登录。

这就是因为你访问某宝时,某宝从Session里获取到了你之前的登录信息(之前登录时会将信息保存在session),所以这次你就不必再进行登录了。这无疑给用户带来了更好的体验感受。所以,Session既然是一个键值对容器,它就是拿来存一些数据的,通过这些缓存的数据,实现为用户带来更方便操作感受。

3、Session怎么产生的

Session的产生不是单独的,它必须和Cookie协同工作,为了更好的理解,这部分内容将在介绍完了Cookie后进行一同讲解。

二、Cookie

说得笼统点,Cookie就是一个HTTP请求里的Header里面的一个键值。在发起HTTP请求时,在Header里面添加一个名为 cookie 的键,里面的值就是会上传给服务端的cookie值。你既可以在客户端指定请求时要带上什么样的Cookie内容,也可以在响应时告诉客户端有哪些cookie会下发。你还需要注意,对于浏览器,浏览器总是会自动处理cookie,浏览器总是会自动将上次响应的cookie自动带入到下次请求中(仅仅会把同域的cookie带上,例如:aa.com下发的cookie,浏览器在下次访问aa.com时会带上这次下发的cookie。而不会把aa.com的cookie带到bb.com上去)。

Cookie的却是上述所说的。但显然不能只了解这点内容,为了让web服务更好的工作,它还有一定的规则定义在里面。

1、Cookie的格式

不得不说Cookie的格式是一种很奇葩的存在(不含贬义)。这里我特指的是在传输过程中的表现格式,而不是cookie本身的定义格式。那么下面我们慢慢道来:

2、响应Cookie的数据格式

几乎大多数的请求响应里都会包含Cookie值,不过需要你注意的是,响应里的cookie值,它的键不是cookie,而是set-cookie,而且,特么的如果有多个cookie在响应里面,不是在同一个set-cookie键里面通过某特定字符分开,而是在响应头里面会有多个set-header键,每个后面跟着一个不同的cookie内容。下面是一份请求响应示列:

{"class":"useDialog"}

这是一份使用<postman>工具进行请求百度从而获取到的请求和响应日志。可以看到,红色线框区域内,百度服务端给我们响应了4个cookie。这样看来,对cookie响应的格式就非常清晰了。下面介绍一下Cookie本身的定义格式含义:

3、Cookie的格式

Cookie有几个固有字段的定义,它们分别如下:

字段含义
expires表示此cookie的过期时间,这是一个时间值,过了这个时间,就不应该再把此cookie提交到服务端了。
max-age表示此cookie的过期时间,这是一个时间段值,请求时间+maxAge = 实际过期的时间。
path表示此cookie能在哪些路径下提交到服务端
domain表示此cookie能提交给哪些域或子域名下
version表示版本号
comment描述,相当于一个对cookie的注释
secure表示此cookie只能在https的请求中被提交
httponly表示此cookie只能在响应和请求中传递,不能将此cookie暴露给开发者操作。也就说明了不能在JavaScript里面获取这样的cookie。
samesite为了防止 CSRF 攻击和用户追踪,有关此项请点击Cookie 的 SameSite 属性查看详情

在响应数据里,这些字段都是通过;号来间隔各个字段属性。把这些字段去除,剩下的就是cookie本身的键值内容了。

例如:上图中的cookie本身键值内容则是:

BD_NOT_HTTPS=1
BIDUPSID=ED2D87A3418138376C6A292B1702A386
PSTM=1577674617
BAIDUID=ED2D87A341813837A5C1FDA5B3D5B76E:FG=1
4、请求Cookie的格式

通过上面的分析,我们拿到了实际上cookie要传递的键值对内容。那么在下次请求时,就要带上这些cookie,这是http协议规定如此的。不过具体请求时要传递哪些内容,又受到了Cookie本身固有字段的各种值的限定。假设我们现在已经拿到了上述cookie,那么在下次提交请求时,则需要将Cookie这样提交:

{"class":"useDialog"}

上图红色线框中就是提交的cookie,可以看到它和响应时的cookie风格不太一样,甚至大不一样。不再是一个cookie一条数据,而是将所有的cookie值,根据cookie自身固定属性判断后,通过;号分割各个cookie,然后拼接成一个整体,将这个整体以header中的cookie这个键提交上去。

响应结果里百度服务端又给我们响应了新的cookie内容,这时候就应该再次保存这些新的cookie,留给下次使用。

从这里也可以看出,要从一个请求(request)里获取cookie,怎么获取?直接从header中取cookie这个键,拿到的值就是客户端提交上来的第一手cookie值。

三、Session与Cookie的不谋而合

我们知道Cookie总是会被浏览器自动处理,下次自动提交。那么,为了更好的提供服务,如果后端能够将某用户的某次访问数据缓存下来,那么用户下次访问时这些缓存数据就必然会提供用户更加个性化和遍历的使用体验。这时候问题就来了,服务端要缓存用户的数据,首先服务端就要有一个东西来确定这部分缓存数据是对应这个用户的,才能正确的实现这个功能。而什么样的一种解决方案可以实现呢,没错,Cookie这玩意儿看起来很符合我们的需求。

当某个用户初次访问M网站时,浏览器由于以前从来没有访问过,所以没有任何cookie提交到M网站。当网站服务端发现没有Cookie,不得不新创建一个Session缓存区域,创建完成后M网站就会把用于确定这个Seesion唯一性的Id值放在响应的cookie里面,唉~~这不就会被浏览器自动保存了嘛,然后下次请求的时候,浏览器又总是自动将cookie提交的,自然而然的,就把服务端之前放在cookie里的ID值又给传到了服务端,当服务端发现cookie里面有一个id,就会去尝试获取对应的Session,这样一来,你的Session缓存区域不就又被获取到了,还是上次那个,缓存数据获取也变得轻松起来。

这样的逻辑过程似乎非常棒,不过又不得不让人产生疑问,难道这个Sesion就这样一直可以保存着,用户越来越多,被分配的Session不也就越来越多,哪有那么多内存呢。所以Session是有过期时间的。

四、Session的过期

通常来说,Sesison的过期时间是30分钟,不过这是可以修改的。这个过期时间的计时方式不是从创建Sesison开始计时,而是从最后一次访问这个Session开始计时。当Session过期了之后,服务端会自动又创建一个新的,然后将新的id放在cookie里。

五、总结

经过了这么多的解释,现在把这整篇文章归结为两个字,他就是:“会话”。这样的描述非常符合Session的作用和意图,它就像用户打开了网站,被认为开启了和服务端的一次“会话”。

我讲完了。

brother的PT-9800PCN标签打印机二次开发 本来想通过esc/p指令打印标签,但是无奈能找到的资料太少,而且打电话给客服,也没有sample可以提供参考,后来客服说使用template功能的话,打印很方便。于是下载手册学习了一下, 先下载P-touch Editor软件,制作标签模板。 制作的模板就是普通的标签,不需要连接数据库之类的,模板里有3个object,分别是文本1,文本2,条形码3。这个很关键,后面的代码传送数据,就是按这... 阅读详情

相关推荐

GD32F303驱动WS2812B灯带:用TIMER+PWM+DMA解放CPU,实现流畅灯效(附完整代码)

本文详细介绍了基于GD32F303的TIMER+PWM+DMA全自动控制方案,用于高效驱动WS2812B灯带。通过硬件外设协同工作,该方案不仅解放了CPU资源,还能实现复杂的灯光效果,如渐变、流水等。文章提供了完整的代码实现和性能优化技巧,适合嵌入式开发者参考。

weixin_42561143的博客 379

cookie和session之间的关系

首次登陆一个账号,一般会生成一个或多个唯一的cookie来保存该账号对该网站的会话信息(cookie保存sessionId,sessionId指向一个唯一的session,session保存会话信息),但是当

zhenzhen_6的博客 4430

从问卷到结论:手把手教你用SPSS 28完成一份完整的社科数据分析报告

本文详细介绍了如何使用SPSS 28完成社会科学研究中的数据分析报告,从问卷数据导入、清洗到描述性和推断性统计分析,再到结果呈现与报告撰写。通过实际案例演示,帮助研究者掌握SPSS 28的核心功能,提升数据分析效率与报告质量。

weixin_28717431的博客 249

Web开发中的session

在web开发中,session是个非常重要的概念。在许多动态网站的开发者看来,session就是一个变量,而且其表现像个黑洞,他只需要将东西在合适的时机放进这个洞里,等需要的时候再把东西取出来。这是开发者对session最直观的感受,但是黑洞里的景象或者说session内部到底是怎么工作的呢?当笔者向身边的一些同事或朋友问及相关的更进一步的细节时,很多人往往要么含糊其辞要么主观臆断,所谓知其然而不知

liangxz0311的专栏 1262

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

Qt 6.5实战:用QMediaPlayer搞定RTSP监控流播放(附LAV Filters解码器避坑指南)

本文详细介绍了如何在Qt 6.5中使用QMediaPlayer实现低延迟RTSP监控流播放,并提供了LAV Filters解码器的配置避坑指南。通过优化缓冲策略和硬件加速设置,显著提升视频流的播放性能和稳定性,适用于工业视觉检测和安防监控等实时场景。

weixin_33712987的博客 399

Session是什么东西

虽然经常做的C++,Web 写的少,但是这个知识在面试中经常遇到,现在就记录一下。 Web的三个概念: Session 、 cookie、 application。 Session 和 Cookie 功能效果是差不多的,区别就是session 是记录在服务端的,Cookie是记录在客户端的。都是记录一系列状态的。 session是服务端存储,cookie是浏览器端存储 Cookie是把用户的数据写给用户的浏览器。 Session技术把用户的数据写到用户独占的session中。 Session对象由服务器创

刘小雨的博客 1万+

高通SDX55平台:5G速率问题排查分析方法

和大家分享一下高通5G平台5G速率问题排查分析方法。

四儿家的小祖宗的博客 5219

Session | web应用的session机制、session的实现原理

Session | web应用的session机制、session的实现原理

m0_61933976的博客 2691

yolov5改进之Fasternet主干网络替换

fasternet替换yolov5主干网络

qq_41920323的博客 5144

基于AI大模型实现自然语言转SQL、SQL解释、SQL优化和SQL转换

随着大数据和人工智能技术的发展,数据分析和数据挖掘在各行各业中的应用越来越广泛。SQL(Structured Query Language)作为关系数据库的查询语言,是数据分析的重要工具。然而,SQL语言的复杂性和专业性使得许多非技术背景的用户难以直接使用,阻碍了数据的广泛利用。为了降低SQL的使用门槛,许多研究者和企业开始探索如何通过自然语言处理(NLP)技术,将自然语言转化为SQL查询语句,从而让用户可以通过自然语言与数据库进行交互。

AI天才研究院 2239

【session的简单介绍】

【session的简单介绍】 文章目录【session的简单介绍】前言一、什么是session?基本机制二、常用API三、session的生命周期四、session与cookie的对比1. 概念2.工作流程3.安全性4.管理难度5.性能方面总结 前言 ` 书接上文cookie,本次的任务是简单的介绍与cookie有关的session。既然都了解了cookie,那为何不了解一下session呢? (下次的任务即是与这两者也有关的token了,别问为什么这三个分开写,问就是投机取巧,水博客罢了=w=) 一

qq_18307045的博客 2006

Vue2 - 详细实现解析Markdown内容生成侧边栏Toc目录索引,识别文章内容根据大标题/小标题自动生成多级文章目录,点击目录导航时跳转到文章内容对应的锚点位置带过渡动画,滑过锚点时高亮对应标题

vue2,nuxt2,Markdown,目录,文章目录锚点,滚动高亮导航文字,根据页面滚动高亮显示目录的侧边栏,自动提取标题生成右侧目录,vuemarkdown解析并生成目录,滚动页面的时候文章目录跟着选中效果,侧边栏滚动跟随页面,右边目录固定,左边内容可以滚动并且与左边目录联动,实现监听滚动,锚点定位,文章目录滚动跟随高亮,右边菜单点击目录滚动到对应标题,报错,渲染失败,文章内容,读取#标题符号,自动生成一个目录树,自动生成Toc目录,博客内容生成目录索引,资讯文章,生成锚点目录树TOC,详细示例代码教

🏆 前端领域优质创作者 3669

Tomcat:第一章:Web应用与HTTP请求和Cookie以及Session之间的关系

web发展历史: 早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。 通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序,Sun公司推出了Servlet技术。 Servlet是运行在服务端的Java小程序,但是Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet。 Tomcat就是一个

我是Java程序员廖志伟,感谢朋友们的支持! 6558

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

简述session技术及与cookie技术的关系。_Web基础技术 | Cookie、Session和Token认证

Cookie、Session和Token认证目录CookieSession认证机制Session的一些安全配置Token认证机制Token预防CSRFSession认证和Token认证的区别----------前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需要浏览器自己去解决这个问题。不然有些情况下即使是打开同一个网站的不同页面也都要重新登录。而Cookie、Session和...

weixin_39910523的博客 90

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

session和cookie的关系是什么

是 Web 开发中常见的技术,它们之间既有联系又有区别。通过这种配合,可以实现更安全、灵活的 Web 应用。

u012534547的博客 726

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Cookie 与 Session 的关系详解

Cookie 与 Session 的关系详解

weixin_51288065的博客 660

session默认有效期多长_Session和Cookie的关系

为什么要用Session和Cookie?  简单一句话,因为Session和Cookie可以记录用户状态信息。  嘶..这到底啥意思呢?动态网页的出现  什么是静态网页  ·含义:一个网页的内容是HTML代码编写的,文字、图片等内容均可通过HTML代码指定了  ·优势:加载速度快,编写简单  ·劣势:可维护性差,扩展性差,不能根据URL显示不同的内容;例如:在URL传入一个name参数想在网页上显...

weixin_39821378的博客 4214

cookie与session有什么关系,token又是干嘛用!!

cookie是什么,它与session有什么关系? cookie是一个保存在客户机中的简单的文本文件,一般保存了与web服务器交互的信息,比如说用户信息、商品加入购物车的信息等等,由于http是无状态连接的,所以要有会话session,web服务器才能区分不同的用户。 ...

点滴空迹的博客 564

HTTP、HTTPS、Cookie 和 Session 之间的关系

HTTP(超文本传输协议)是一种用于从 Web 服务器传输超文本到本地浏览器的协议。它是万维网的数据通信基础,主要用于请求和传输网页内容。HTTPS(安全超文本传输协议)是在 HTTP 的基础上,加入了 SSL/TLS 加密层的协议。它在传输数据之前先对数据进行加密,从而确保数据的安全性和完整性。Cookie是由 Web 服务器发送到用户浏览器的小块数据,用户的浏览器会将其存储在本地。Cookie 的主要目的是在用户的浏览器与服务器之间传递状态信息。Session是在服务器端维护的用户状态信息。

龚小帅的博客 1810

面试官,别再问我了---Session和Cookie

session原理: 1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大 2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值, 创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器 3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果该JSE...

wu756271909的博客 206

访问请求之间的关系cookie和session之间的关系

LH_python的博客 364

深入理解cookie和session

cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结。(转发自https://www.cnblogs.com/roy-blog/p/8250519.html) 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取一个链接,查看其请求头。你就会看到cookie的信息。如下图所示。 如上图所示,我们访问了新...

GarfieldEr007的专栏 787

cookie与session的区别

session原理: 1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大 2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值, 创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器 3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果该J...

wyqwilliam的博客 176

Cookie和Session

会话技术简介 1.存储客户端的状态 Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 不知道该客户端是谁,所以需要会话技术识别客户端的状态。 2.会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话。 Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除cookie Session:将数据存储到服务器端,安...

育奕的个人博客 154

Session和Cookie我不允许你不懂

Cookie是一种在客户端存储少量数据的技术,通过 HTTP 头部传递信息,实现用户状态保持,但受容量、安全性等限制。Session则将用户数据存储在服务器端,通过 Cookie 传递 Session ID 来恢复状态,虽然安全性更高,但也需要合理管理服务器资源。

HYY的博客 1103
上一篇: 【Vue,微信】单页应用到底该用hash模式还是history模式
下一篇: 【微信公众号开发】八、微信JS发起支付
Microanswer
博客等级 码龄10年 38粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值