我有Cs Cart Multi供应商。我将PHP 5.5升级到PHP 7.0。 并有错误:
865 FastCGI在stderr中发送:" PHP消息:PHP警告: session_start():会话回调期望返回true / false 第341行的/var/www/cscart/app/Tygh/Session.php PHP消息:PHP 致命错误:session_start():无法初始化存储模块: 用户(路径:/ var / lib / php / sessions)位于第341和34行的/var/www/cscart/app/Tygh/Session.php中; 从上游读取响应头,客户端:49.189.136.11, 服务器:
目录/ var / lib / php / sessions有0777.在其他网站上,会话工作正常。
文件Session.php:
/**
* Starts session
* @param array $request Request data
*/
public static function start($request = array())
{
// Force transfer session id to cookies if it passed via url
if (!empty($request[self::$_name])) {
self::setId($request[self::$_name], false);
} elseif (empty($_COOKIE[self::$_name])) {
self::setId(self::_generateId());
}
session_name(self::$_name);
session_start();
// Session checker (for external services, returns "OK" if session exists, empty - otherwise)
if (!empty($request['check_session'])) {
die(!empty($_SESSION) ? 'OK' : '');
}
// Validate session
if (!defined('SKIP_SESSION_VALIDATION')) {
$validator_data = self::getValidatorData();
if (!isset($_SESSION['_validator_data'])) {
$_SESSION['_validator_data'] = $validator_data;
} else {
if ($_SESSION['_validator_data'] != $validator_data) {
session_regenerate_id();
$_SESSION = array();
}
}
}
// _SESSION superglobal variable populates here, so remove it from global scope if needed
if (Bootstrap::getIniParam('register_globals')) {
Bootstrap::unregisterGlobals('_SESSION');
}
}
服务器:NGINX,PHP7.0-FPM
答案 0 :(得分:1)
session_start()
使用您之前使用session_set_save_handler(...)
设置的任何处理程序,并且该处理程序(或单个函数)必须返回true / false结果以表示成功或失败。您有一个不返回true / false结果的处理程序。
回顾一下;实际错误是会话处理程序的实现,而不是调用session_start()
的代码。
答案 1 :(得分:0)
如果你使用session_handler,for_example,SessionRedisHandler Class,open函数必须返回true。我在php7.0中解决了这个问题。