zoukankan      html  css  js  c++  java
  • PHP使用session_set_save_handler陷阱

    陷阱如下

    当脚本使用了session_set_save_handler 来重定向 session后,使用session_destroy后再使用session_start()重新开启session会报错

    代码如下,

    <?php
    function open() {
        echo 'session start';
        echo "
    ";
    }
    
    function close() {
        echo 'session close';
        echo "
    ";
    }
    
    function read($sessionId) {
        echo 'read'.$sessionId;
        echo "
    ";
    }
    
    function write($sessionId, $data) {
        echo 'write'.$sessionId.$data;
        echo "
    ";
    }
    
    function destroy($sessionId) {
        echo 'destroy '.$sessionId;
        echo "
    ";
    }
    function gc($lifetime) {
        echo 'gcccc';
        echo "
    ";
    }
    session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
    session_start();
    echo session_id();
    echo "
    ";
    session_destroy();
    
    
    session_start();
    $id = 'h06vgdfdfve6b8f66sva6basf8';
    session_id($id);
    echo session_id();

    运行后报错

    1 Fatal error: session_start() [<a href='function.session-start'>function.session-start</a>]: Failed to initialize storage module: user (path: /var/lib/php/session) in /home/user/site/session.php on line 39

    屏蔽session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');

    正常流程下(使用原生session)错误不会再出现。

    so..

    如果网站要使用自定义session建议自己封装和直接使用相关函数, 绕开session_set_save_handler

  • 相关阅读:
    iOS 证书、真机调试、发布 App Store
    iOS 9 适配
    交叉编译tslib1.4
    nau8822 codec driver 录音时mic bias 无法自动打开问题
    nuc900 nand flash mtd 驱动
    在ubuntu14.04上安装oracle java6 java7的方法
    N3292x IBR介绍
    N3292系列资料之RTC介绍
    支持mdev的init脚本片断
    Nginx
  • 原文地址:https://www.cnblogs.com/sailrancho/p/3384051.html
Copyright © 2011-2022 走看看