首页技术文章正文

如何理解PHP中session?

更新时间:2019年08月07日 11时12分39秒 来源:黑马程序员

首先声明:本文章适合具有http协议基础以及cookie基础的读者,如果没有请选恶补。

进入主题

既然是干货就简明扼要说一下概念。Session是客户端浏览器与服务器之间会话技术中的一种,session技术是以cookie技术为基础,会将重要的数据保存在服务器上,将标识性的数据以cookie的形式保存在客户端的一种技术。

服务器会为每一个客户端保存一份数据,那么能保存数据的地方也就只有数据库或文件。而session默认则以文件进行保存客户端数据(也就是每一个客户端保存一个文件)。一个服务器在为n多个客户端保存了数据到文件的情况下,在下次客户端再次请求时,如何能在众多的文件中找到属于当前客户端的文件呢(大海捞针)。其实很简单,前面已经提到,服务器在为客户端保存数据时,是以文本文件的形式保存数据,所以服务器会做到为每个来访问的客户端创建的文本文件名不会重复,这样就可以将文件名作为每一个客户端的标识,以cookie的形式保存到客户端。

当客户端再次发来请求时,由于已保存有cookie,cookie中保存的又是文本文件名。那么服务器在接收到这样的cookie时,就会读取出cookie中的文件名,再到硬盘中找到这个文件。

Session机制的原理

Session机制包含两个组成部分,其一是程序代码中的$_SESSION变量,另一个是硬盘中保存数据的文本文件(术语session文件)。Session机制主要体现在这两者之间的协同功能。它们的工作过程请看如下详细步骤。

首次请求:

Session机制开启,在硬盘中创建session文件,并将文件名以cookie形式返回客户端。

同时激活$_SESSION内存变量

首次请求结束时,将$_SESSION中的数据序列化并保存到session文件中。

其后各次:

Session机制开启,并读取客户端发送过来的cookie中保存的session文件名,根据文件名到硬盘中找到session文件,同时将session文件中的数据读取出来,并进行反序列化,再赋值给$_SESSION变量。这样通过session文件中,即实现了多次请求中数据的共享。

当本次请求结束后,还会再将$_SESSION内存中的数据序列化并保存到session文件中。


黑马中级程序员课程

推荐了解热门学科

java培训Python人工智能Web前端培训PHP培训
区块链培训影视制作培训C++培训产品经理培训
UI设计培训新媒体培训产品经理培训Linux运维
大数据培训智能机器人软件开发

黑马程序员热门视频教程
Python入门教程完整版(懂中文就能学会)零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript软件测试入门到精通
在线咨询 我要报名
和我们在线交谈!