php session寫入失敗是因為把session誤存在memcache裡面了,解決方法就是把session存在redis裡面,然後修改php的設定檔即可。
本文操作環境:windows10系統、PHP7.1版,DELL G3電腦
特定問題:
php session 寫入失敗怎麼辦?
php 一直報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
#問題描述
#我的程式碼寫入session 的時候一直報這個問題,環境是windows10 ubuntu 子系統,session 寫入的位置是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();
你期待的結果是什麼?實際看到的錯誤訊息又是什麼?
解決方法:
已經找到問題所在了,我們現在是把session 存在memcache裡面,memcache用的是6379端口, 但是之前我是把session存在redis裡面,改了php的設定文件,我忘了這一點,所以我一直以為程式碼有問題。
推薦學習:《PHP影片教學》
以上是php session 寫入失敗怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!