11

分享我遇到的一个问题(现在已经解决了)。

在我的开发机器上,我使用 PHP 运行 IIS。我升级到 PHP7,突然我的代码不再工作,返回这个错误......

session_start():读取会话数据失败:用户(路径:C:\WINDOWS\temp)

它看起来像一个权限问题,对吧?因此,我花了很长时间调整 php.ini 设置并尝试更改文件夹权限 - 没有成功。

然后我意识到了一些事情。请看下面我的回答。

4

3 回答 3

44

我终于意识到这条消息毫无意义——应用程序使用数据库实现了自己的会话处理程序。在read方法中,我从数据库中获取会话数据作为字符串。

class Sess implements SessionHandlerInterface
...
    public function read($key)
    {
        $qKey = U_Data::quote($key);
        $dt = U_Data::datetime();
        $sql = <<<EOT
SELECT `sess_data` FROM `sess`
WHERE `sess_key` = $qKey 
AND `sess_exp_ts` > $dt
ORDER BY `sess_exp_ts` DESC
LIMIT 1
EOT;
        return U_Data::getOneVal($sql);
    }

如果没有匹配的数据,U_Data::getOneVal 方法有第二个参数返回默认值为null并且在 PHP5 中运行良好,但在 PHP7.1 中会导致错误。一个简单的改变让它返回一个空字符串,而不是解决了这个问题。

        return U_Data::getOneVal($sql, '');

就这样。如果您收到有关 session_start 不起作用的警告并且您正在实现自己的会话处理程序,请尝试检查read方法中的代码以确保它始终返回 string

(注:U_Data 只是我自己的数据实用程序类)

我希望这可以节省其他人我绞尽脑汁的时间!

于 2017-01-09T02:47:28.473 回答
4

我自己也遇到了同样的错误。经过大量的谷歌搜索和诅咒,证明在我的情况下这确实是一个权限问题,尽管在我的 htdocs 根文件夹上,而不是在错误输出中提到的路径上。根文件夹权限为 700,而其中的所有其他内容为 755(我有一个 Joomla 安装,它规定文件夹权限为 755)。修复根文件夹权限终于解除了这个问题。

于 2018-08-13T00:00:58.233 回答
-1

经过一番挖掘,我发现 Joomla 中的这个错误可能是由于我的本地机器上没有运行 mySQL 服务器引起的。启动 mySQL 服务解决了这个问题,因此它与会话或权限无关。

于 2021-03-11T02:26:10.480 回答