为什么session_set_save_handler不能运行PHP 5.2

时间:2011-12-08 11:35:38

标签: php session

这是代码,我正在做一个有根据的猜测,即在分配会话var时调用s ess_read。它正在分配价值。有没有办法测试这个?

 function sess_open($sess_path, $sess_name) {


        return true;
    }

    function sess_close() {
        return true;
    }

    function sess_read($sess_id) {

        echo "TEST";
        $result = mysql_query("SELECT Data FROM sessions WHERE SessionID = '$sess_id';");
        if (!mysql_num_rows($result)) {
            $CurrentTime = time();
            mysql_query("INSERT INTO sessions (SessionID, lastseen) VALUES ('$sess_id', $CurrentTime);") or die(mysql_error());

            return '';
        } else {
            extract(mysql_fetch_array($result), EXTR_PREFIX_ALL, 'sess');
            mysql_query("UPDATE sessions SET lastseen = $CurrentTime WHERE SessionID = '$sess_id';");
            return $sess_Data;
        }
    }

    function sess_write($sess_id, $data) {


        $CurrentTime = time();
        mysql_query("UPDATE sessions SET Data = '$data', lastseen = $CurrentTime WHERE SessionID = '$sess_id';");
        return true;
    }

    function sess_destroy($sess_id) {
        mysql_query("DELETE FROM sessions WHERE SessionID = '$sess_id';");
        return true;
    }

    function sess_gc($sess_maxlifetime) {
        $CurrentTime = time();
        mysql_query("DELETE FROM sessions WHERE lastseen + $sess_maxlifetime < $CurrentTime;");
        return true;
    }

    session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
    session_start();
    ini_set('session.gc-maxlifetime', 60);
    $_SESSION['foo'] = "bar";
    $_SESSION['baz'] = "wombat";
  

echo $ _SESSION ['baz'];

// ^^^^这会返回wombat,但为什么不调用sess_read

编辑

确定首先检查session_get_save_handler正在使用或die()

进行检查

然后在调用之前设置session_destroy() - 这解决了问题。会议已经开始在其他地方包含

1 个答案:

答案 0 :(得分:0)

如果您查看 sess_read 函数,可以看到它没有返回您要求的 $ _ SESSION 数组中某个键的值因为,它会读取整个会话内容。

在脚本启动时调用read函数一次,在脚本结束时调用

这两个调用之间的$ _SESSION类似于存储数据的常规数组,但它是超全局(您可以从任何范围访问它)