php session寫入失敗是因為把session誤存在memcache里面了,其解決辦法就是把session存在redis里面,然后修改php的配置文件即可。
本文操作環(huán)境:windows10系統(tǒng)、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 的時候一直報這個問題, 環(huán)境是windows10 ubuntu 子系統(tǒng),session 寫入的位置是 memcache 6379 端口,擴展都開啟了,有大神能解答一下這是什么問題嗎?
問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法
相關(guān)代碼
class Session { // single ton private static $session_handler_; public static function Init() { if (!isset(self::$session_handler_)) self::$session_handler_ = new Session(); } // 阻止用戶復(fù)制對象實例 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();
你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?
解決辦法:
已經(jīng)找到問題所在了,我們現(xiàn)在是把session 存在memcache里面,memcache用的是6379端口, 但是之前我是把session存在redis里面,改了php的配置文件,我忘了這一點,所以一直以為代碼有問題。
推薦學(xué)習(xí):《PHP視頻教程》