セッションが誤って memcache に保存されたため、php セッションの書き込みに失敗しました。解決策は、セッションを redis に保存し、php 構成ファイルを変更することです。
この記事の動作環境: Windows10 システム、PHP7.1 バージョン、DELL G3 コンピューター
具体的な質問:
PHP セッションの書き込みに失敗した場合はどうすればよいですか?
php がセッション書き込みエラーを報告し続ける
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
問題の説明
コードをセッションに書き込むときにこの問題を報告し続けます。環境は Windows 10 Ubuntu サブシステムで、セッションが書き込まれる場所は memcache ポート 6379 で、拡張機能は有効になっています。問題が何であるかを誰か教えていただけますか?
問題の環境背景と試した方法
関連コード
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();
どのような結果が予想されますか?実際に表示されるエラー メッセージは何ですか?
解決策:
問題が見つかりました。セッションを memcache に保存します。memcache はポート 6379 を使用しますが、セッションを memcache に保存する前は、redis に保存していました。 , phpの設定ファイルを変更したのですが、そのことを忘れていたので、ずっとコードが間違っているのではないかと思っていました。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPセッションの書き込みに失敗した場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。