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.
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
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!