前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入了解session的执行步骤

深入了解session的执行步骤

作者头像
仙士可
发布2019-12-19 14:29:06
6210
发布2019-12-19 14:29:06
举报
文章被收录于专栏:仙士可博客仙士可博客

关于php session的实现方法,在之前我其实已经发过很多个相关的文章了

php session基本原理解析

windows php关于session临时文件的一个坑

session会话

这篇文章,将使用strace工具去追踪php的session到底是如何执行的

安装strace工具很简单,只需要:

apt-get install strace

首先,我们准备一个非常纯洁的test.php文件:

<?php

先测试下strace命令:

strace php test.php

由于php启动过程非常多,我只截图了开始运行以及结束的系统调用执行过程

session start 

现在,我们开始写session的测试代码:

<?php
session_start();//session开始i
$_SESSION['name']='仙士可';
$_SESSION['age']=21;
echo 1;//echo个1查看顺序
$_SESSION['qq']=1067197739;
//赋值多个,查看存储的步骤

由于使用的是php-cli模式,不好测试header头以及二次访问

可看出,session start有以下几个步骤:

1:随机生成一个session id

2:尝试获取session文件,如果不存在则新增

3:发送一个header头(截图没有体现)

4:文件加锁,准备写入数据

在文件执行完毕之后,将$_SESSION的值序列化后存储到文件中

这样,session的周期已经完毕

存在session文件

第一次访问php,则会随机生成一个session文件发送header头,等待浏览器第二次请求携带cookie,进行判断session_id,我们可以通过上面已经生成的session_id,然后通过session_id函数赋值,进行模拟浏览器携带cookie的情况:

<?php
session_id('g3ddi98a484aer6l4sbqmllpl6');
session_start();//session开始

var_dump($_SESSION);

可看出,第二次访问之后,php会读取原有的session文件,赋值到$_SESSION全局变量中,然后更新session文件的使用时间,以免被gc

删除session

通过session_destroy()去销毁session

<?php
session_id('g3ddi98a484aer6l4sbqmllpl6');
session_start();//session开始
session_destroy();// 销毁session

session gc 

在php中,原生的session非常恶心,恶心的点在于它的gc机制

php session的gc是通过几率触发,然后遍历session文件,通过获取所有session文件的最后修改时间进行比对,再删除文件,这会造成以下几种情况:

1:几率gc,意味着session过期不会马上删除文件

2:遍历gc,意味着每次gc都要消耗大量的性能

本人通过运行n次文件,去模拟多个session

for((i=1;i<=100;i++));  
do   
php test.php
done

调用session gc

session_gc();//session_gc;

可看到在不断的遍历session文件

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • session start 
  • 存在session文件
  • 删除session
  • session gc 
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档