PHP会话(session)工作原理分析

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/149/ ]

之前博客启用了swoole拓展,一段时间后发现验证码,留言等相关功能无法使用.经过仔细排查,才找到原因.——原生PHP的session功能无法使用了.

之前博客启用了swoole拓展,一段时间后发现验证码,留言等相关功能无法使用。经过仔细排查,才找到原因。——原生PHP的session功能无法使用了。

由于swoole拓展的内部运行机制比较特殊,导致PHP的setcookie函数,等相关操作都失效了,PHP原生session操作也就异常了。

先看一段PHP操作session的代码:

<?php
session_start();
$_SESSION['mPHP'] = '磨途歌';

当调用session_start()的时候,PHP会启动新会话或者重用现有会话。

PHP是根据什么来判定要启动新会话还是重用现有会话呢?PHP默认是根据cookie。

如果$_COOKIE['PHPSESSID']存在,就重用会话,不存在,就创建新会话。PHPSESSID为php.ini中定义的默认值。

再上一段代码,看完或许就明白了:

<?php
if( isset( $_COOKIE['PHPSESSID'] ) ) {
    session_id( $_COOKIE['PHPSESSID'] );
}
session_start();
$_SESSION['mPHP'] = '磨途歌';

php.ini默认把session保存为文件。这里假设PHPSESSID=123456,保存路径为c盘下的tmp文件夹

1)PHP脚本从cookie中获取会话ID

2)通过session_id()函数锁定session文件为:c:\tmp\phpsess_123456

3)当调用session_start()的时候,PHP脚本就读取c:\tmp\phpsess_123456中的值,经过处理后,赋值给$_SESSION全局变量

4)PHP脚本结束时,就把$_SESSION编码后重新保存到c:\tmp\phpsess_123456

这就是PHP的session的运作流程了。

之后再写一篇文章,分享如何解决swoole拓展导致session异常的问题。

    评论:

    1. 暂无评论...
    2. 我来说两句:

        切换  

      磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

        切换  

      磨途歌随机验证码