公司是分布试的服务器,使用的数据库来保存 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
© 著作权归作者所有