session_start(): Обратный вызов сеанса ожидает возвращаемое значение true/false в

У меня есть поставщик Cs Cart Multi. Я обновил свой PHP 5.5 до PHP 7.0. И есть ошибка:

865 FastCGI отправлено в stderr: «Сообщение PHP: Предупреждение PHP: session_start(): Обратный вызов сеанса ожидает истинного/ложного возвращаемого значения в /var/www/cscart/app/Tygh/Session.php в строке 341 Сообщение PHP: Неустранимая ошибка PHP: session_start(): не удалось инициализировать модуль хранения: пользователь (путь: /var/lib/php/sessions) в /var/www/cscart/app/Tygh/Session.php в строке 341 "при чтении заголовка ответа от восходящего потока, клиент : 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


person Анатолий Колтыков    schedule 26.08.2016    source источник


Ответы (2)


session_start() использует любые обработчики, которые вы ранее установили с помощью session_set_save_handler(...), и этот обработчик (или отдельные функции) должен возвращать истинный/ложный результат, чтобы сигнализировать об успехе или неудаче. У вас есть обработчик, который не возвращает результат true/false.

Резюмировать; фактическая ошибка - это реализация вашего обработчика сеанса, а не код, который вызывает session_start().

person sisve    schedule 26.08.2016

если вы используете session_handler , for_example, SessionRedisHandler Class, функция открытия должна возвращать true。Я решаю эту проблему в php7.0。

person hua zhang    schedule 13.09.2016