阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

了解php中session垃圾回收机制

339次阅读
没有评论

共计 2153 个字符,预计需要花费 6 分钟才能阅读完成。

1、php 中 session 的生成机制

我们先来分析一下 PHP 中是怎么生成一个 session 的。设计出 session 的目的是保持每一个用户的各种状态来弥补 HTTP 协议的不足 (无状态)。我们现在有一个疑问,我们都知道 session 是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?这个时候就得借助 cookie 了。当我们在代码中调用 session_start(); 时,PHP 会同时往 SESSION 的存放目录(默认为 /tmp/) 和客户端的 cookie 目录各生成一个文件。session 文件名称像这样:

了解 php 中 session 垃圾回收机制

格式为 sess_{SESSIONID},这时 session 文件中没有任何内容,当我们在 session_start(); 添加了这两行代码:

复制代码 代码如下:
$_SESSION['name'] = 'wanchun0222';$_SESSION['blog'] = 'coderbolg.net'; 这时文件就有内容了:
复制代码 代码如下:
name|s:11:"wanchun0222";blog|s:13:"coderbolg.net";

这时再看看 cookie:

了解 php 中 session 垃圾回收机制

可以看到服务器为我们自动生成了一个 cookie,cookie 名称为 ”PHPSESSID”,cookie 内容是一串字符,其实这串字符就是 {SESSIONID}。也许你已经明白了,当我们使用 session 时,PHP 就先生成一个唯一的 SESSIONID 号(如2bd170b3f86523f1b1b60b55ffde0f66),再在我们服务器的默认目录下生成一个文件,文件名为sess_{SESSIONID},同时在当前用户的客户端生成一个 cookie,内容已经说过了。这样 PHP 会为每一个用户生成一个 SESSIONID,也就是说一个用户一个 session 文件。PHP 第一次为某个用户使用 session 时就向客户端写入了 cookie,当这个用户以后访问时,浏览器会带上这个 cookie,PHP 在拿到 cookie 后就读出里面的 SESSIONID,拿着这个 SESSIONID 去 session 目录下找 session 文件。找到后在调用$_SESSION[‘blog’] 的时候显示出来。

2、php 中 session 的过期回收机制

我们明白了 session 的生成及工作原理,发现在 session 目录下会有许多 session 文件。当然这些文件一定不是永远存在的,PHP 一定提供了一种过期回收机制。在 php.ini 中 session.gc_maxlifetime 为 session 设置了生存时间(默认为 1440s)。如果 session 文件的最后更新时间到现在超过了生存时间,这个 session 文件就被认为是过期的了。在下一次 session 回收的时候就会被删除。那下一次 session 回收是在什么时候呢?这和 php 请求次数有关的。在 PHP 内部机制中,当 php 被请求了 N 次后就会有一次触发回收机制。到底是请求多少次触发一次是通过以下两个参数控制的:

复制代码 代码如下:
session.gc_probability = 1session.gc_divisor = 100

这是 php.ini 的默认设置,意思是每 100 次 PHP 请求就有一次回收发生。概率是 gc_probability/gc_divisor。我们了解了服务器端的 session 过期机制,再来看看客户端的 cookie 的过期机制。

如果 cookie 失效了浏览器自然发送不了 cookie 到服务器,这时即使服务器的 session 文件存在也没用,因为 PHP 不知道要读取哪个 session 文件。我们知道 PHP 的 cookie 过期时间是在创建时设置的,那么 PHP 在创建 session 的同时为客户端创建的 cookie 的生命周期是多久呢?这个在 php.ini 中有设置:session.cookie_lifetime。这个值默认是 0,代表浏览器一关闭 SESSIONID 就失效。那就是说我们把 session.gc_maxlifetime 和 session.cookie_lifetime 设置成同一个值就可以控制 session 的失效时间了。

3、php 中 session 的客户端存储机制

由上面的介绍我们可以知道,如果用户关闭了 cookie,那我们的 session 就完全没法工作了。是的,确实是这样。php 中 session 的客户端存储机制只有 cookie 吗?不是的。既然我们的 SESSIONID 不能通过 cookie 传递到各个页面,那我们还有另一个法宝,就是通过页面 GET 传值的方式。

PHP 可以在 cookie 被禁用时自动通过 GET 方式跨页传递 SESSIONID,前提是设置 php.ini 的 session.use_trans_sid 为 1。这时当我们在客户端禁用了 cookie 时使用了 session,并在当前页面通过点击链接到另一页面时,PHP 会自动在链接上添加 SESSIONID 参数,像这样:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。我想你应该看到了这种方式的缺点:好像不够安全啊。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-08发表,共计2153字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799099
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...