session_set_save_handler 的奇怪问题

2022年4月13日 0 条评论 945 次阅读 0 人点赞

公司是分布试的服务器,使用的数据库来保存 session。在从 PHP5 升级到 PHP7.4 过程中发现,session write 一直没有被调用,所以也一直没有被更新到。

问题解决很简单,在 read 方法里。之前是:

public function read($sessionId)
{
    $res = mysqli_query($link, 'SELECT data from session where session="' . $sessionId . '"');
    if ( $res ) {
        $row = mysqli_fetch_assoc($res);
        return $row['data'];
    }
    retun ''
}

只需要改成:

public function read($sessionId)
{
    $res = mysqli_query($link, 'SELECT data from session where session="' . $sessionId . '"');
    if ( $res ) {
        $row = mysqli_fetch_assoc($res);
        return empty($row['data']) ? '' : $row['data'];
    }
    retun ''
}

猜测原因是,如果read 返回了 null / false,就不会触发 write 了....... 但没有找到原理。

又一个深坑呀~~

好吧,文档(https://www.php.net/manual/zh/function.session-set-save-handler),确实写了。返回的需要是 string。

read(string $sessionId): string

guojia

这个人太懒什么东西都没留下