2016-08-26 5 views
1

У меня есть Cs Cart Multi vendor. Я обновил свой PHP 5.5 до PHP 7.0. И есть ошибка:session_start(): Обратный вызов сеанса ожидает истинного/ложного возвращаемого значения в

865 FastCGI sent in stderr: "PHP message: PHP Warning: session_start(): Session callback expects true/false return value in /var/www/cscart/app/Tygh/Session.php on line 341 PHP message: PHP Fatal error: session_start(): Failed to initialize storage module: user (path: /var/lib/php/sessions) in /var/www/cscart/app/Tygh/Session.php on line 341" while reading response header from upstream, client: 49.189.136.11, server:

Каталог/вар/Библиотека/PHP/сессий 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

ответ

1

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^