分享我遇到的问题(现在已经解决了)。
在我的开发机器上,我使用PHP运行IIS。我升级到PHP7,突然我的代码不再有效,返回此错误......
session_start():无法读取会话数据:user(path:C:\ WINDOWS \ temp)
看起来像权限问题,对吗?所以,我花了很长时间调整php.ini设置并尝试更改文件夹权限 - 没有成功。
然后我意识到了什么。请参阅下面的答案。
答案 0 :(得分:31)
我终于意识到这条消息毫无意义 - 应用程序使用数据库实现了自己的会话处理程序。在 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 方法中的代码,以确保始终返回字符串。
(注意:U_Data只是我自己的数据实用程序类)
我希望这能节省别人花在我脑子上的时间!
答案 1 :(得分:1)
我自己也遇到了同样的错误。经过大量的谷歌搜索和诅咒之后,事实证明这确实是一个权限问题,尽管在我的htdocs根文件夹中,而不是在错误输出中提到的路径上。根文件夹权限为700,而其中的其他所有权限为755(我有一个Joomla安装,其中规定了755的文件夹权限)。修复根文件夹权限后,该问题终于得以解决。
答案 2 :(得分:-1)
经过一番挖掘,我发现 Joomla 中的这个错误可能是由于 mySQL 服务器没有在我的本地机器上运行造成的。启动mySQL服务解决了这个问题,所以它与会话或权限无关。