세션이 Memcache에 실수로 저장되었기 때문에 PHP 세션 쓰기에 실패했습니다. 해결 방법은 세션을 Redis에 저장한 다음 PHP 구성 파일을 수정하는 것입니다.
이 글의 운영 환경: Windows 10 시스템, PHP 버전 7.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
문제 설명
세션을 작성할 때 내 코드에서 계속 이 문제를 보고합니다. 환경은 Windows10 우분투 하위 시스템이고 세션이 작성되는 위치는 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는 포트 6379를 사용합니다. 하지만 이전에는 Redis에 세션을 저장하고 PHP 구성 파일을 변경한 것을 잊어버렸습니다. 나는 항상 코드에 문제가 있다고 생각했습니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 세션 쓰기가 실패하는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!