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. 企业管理培训 回复2017年02月21日 11时11分
    磨者
    专业,学习了。支持支持

  2. 磨者 943 回复2017年07月12日 10时07分
    磨者
    hengnjb5.cn
    rewhy.cn
    inansheng3j77.cn
    zhoushidz9l.cn
    ichuansheng5nv5.cn
    nghaisheng8oqe.cn
    oushengn1r9.cn
    nshin3zx.cn
    uansheng5nv5.cn
    ghaisheng8oqe.cn
    ydsej.cn
    angchunshin3zx.cn
    zhoushirlp3.cn
    xisheng1nfb.cn
    hainansheng3j77.cn
    behdae.cn
    ldgar.cn
    qmebcc.cn
    shi9p7n.cn
    ng8oqe.cn
    bkcref.cn
    cyb8.cn
    shengn1r9.cn
    ongqingshiv3fn.cn
    houshidz9l.cn
    thsew.cn
    cjedg.cn
    hunshin3zx.cn
    unnansheng4sqm.cn
    ngchunshin3zx.cn
    hongqingshiv3fn.cn
    hidz9l.cn
    jianshengtn5j.cn
    gzhoushirlp3.cn
    g3j77.cn
    qingshiv3fn.cn
    gnjb5.cn
    gv33z.cn

  3. 分板机 回复2018年08月23日 10时36分
    磨者
    简析很详细,谢谢分享

  4. 22攻略 回复2023年05月24日 15时19分
    磨者
    非常感谢你分享这篇文章,我从中学到了很多新的知识。

  5. 我来说两句:

      切换  

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

      切换  

    磨途歌随机验证码