2016-08-26 3 views
1

Ich habe Cs Cart Multi Vendor. Ich habe mein PHP 5.5 auf PHP 7.0 aktualisiert. Und haben Fehler:session_start(): Sitzung Rückruf erwartet True/False Rückgabewert in

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:

Verzeichnis/var/lib/php/Sitzungen hat 0777. Auf anderen Sites feine Session funktioniert.

Datei 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'); 
    } 

} 

Server: NGINX, PHP7.0-FPM

Antwort

1

session_start() nutzt alle Handler Sie mit session_set_save_handler(...) vorher festgelegt haben, und dass Handler (oder die einzelnen Funktionen) muss ein wahres/falsches Ergebnis zurückgeben, um Erfolg oder Misserfolg zu signalisieren. Sie haben einen Handler, der kein True/False-Ergebnis zurückgibt.

Um zu wiederholen; Der tatsächliche Fehler ist die Implementierung Ihres Sitzungshandlers, nicht der Code, der session_start() aufruft.

0

, wenn Sie Benutzer session_handler, for_example, SessionRedisHandler Klasse muss die offene Funktion zurückgeben true.I dieses Problem in php7.0 lösen.

Verwandte Themen