Maison  >  Article  >  développement back-end  >  Que faire si l'écriture de la session PHP échoue

Que faire si l'écriture de la session PHP échoue

藏色散人
藏色散人original
2021-07-09 10:16:023118parcourir

L'écriture de la session php a échoué car la session a été stockée par erreur dans Memcache. La solution est de stocker la session dans Redis, puis de modifier le fichier de configuration php.

Que faire si l'écriture de la session PHP échoue

L'environnement d'exploitation de cet article : système Windows 10, PHP version 7.1, ordinateur DELL G3

Questions spécifiques :

Que dois-je faire si l'écriture de la session php échoue ?

php continue de signaler l'échec d'écriture de la session

Warning: session_write_close(): Failed to write session data using user defined save handler. (session.save_path: tcp://127.0.0.1:6379) in /var/www/html/php/libs/util/Session.php on line 43

Que faire si lécriture de la session PHP échoue

Description du problème

Mon code continue de signaler ce problème lors de l'écriture de la session. L'environnement est le sous-système Ubuntu de Windows10, et l'emplacement où la session est écrite est le port Memcache 6379, extension C'est tout. allumé. Quelqu'un peut-il me dire quel est le problème ?

Le contexte environnemental du problème et les méthodes que vous avez essayées

Code associé

class Session {
  // single ton
  private static $session_handler_;
  public static function Init() {
    if (!isset(self::$session_handler_))
      self::$session_handler_ = new Session();
  }
  // 阻止用户复制对象实例
  public function __clone() {
    trigger_error('Clone Session is not allowed.', E_USER_ERROR);
  }
  private function __construct() {
    session_set_save_handler(array($this, "Open"),
                             array($this, "Close"),
                             array($this, "Read"),
                             array($this, "Write"),
                             array($this, "Destroy"),
                             array($this, "Gc"));
    // for web user
    $session_id = Cookie::Get(SESSIONID);
    /* length of session id
     128-bit digest (MD5)
     4 bits/char: 32 char SID
     5 bits/char: 26 char SID
     6 bits/char: 22 char SID
     160-bit digest (SHA-1)
     4 bits/char: 40 char SID
     5 bits/char: 32 char SID
     6 bits/char: 27 char SID
    */
    if (!empty($session_id) && 26 == strlen($session_id))
      session_id($session_id);
    session_start();
  }
  public function __destruct() {
    session_write_close();
  }
  public function Open($save_path, $session_name) {
    return true;
  }
  public function Close() {
    return true;
  }
  public function Read($session_id) {
    $key = SESSION_PREFIX . $session_id;
    $memcached_client_ = SessionMemCachedClient::GetInstance();
    return (string)$memcached_client_->get($key);
  }
  public function Write($session_id, $data) {
    $key = SESSION_PREFIX . $session_id;
    $memcached_client_ = SessionMemCachedClient::GetInstance();
    if ($data)
      return $memcached_client_->set($key, $data, SESSION_EXPIRE_TIME);
    return true;
  }
  public function Destroy($session_id) {
    $key = SESSION_PREFIX . $session_id;
    $memcached_client_ = SessionMemCachedClient::GetInstance();
    return $memcached_client_->delete($key);
  }
  public function Gc($maxlifetime) {
    return true;
  }
}
Session::Init();

Quel est le résultat que vous attendez ? Quel est le message d'erreur réel que vous voyez ?

Solution :

Le problème a été trouvé. Nous stockons maintenant la session dans Memcache utilise le port 6379. Mais avant, j'ai stocké la session dans Redis et j'ai oublié que j'avais remarqué cela, alors. J'ai toujours pensé qu'il y avait quelque chose qui n'allait pas avec le code.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn