首頁 >後端開發 >PHP問題 >php session 寫入失敗怎麼辦

php session 寫入失敗怎麼辦

藏色散人
藏色散人原創
2021-07-09 10:16:023280瀏覽

php session寫入失敗是因為把session誤存在memcache裡面了,解決方法就是把session存在redis裡面,然後修改php的設定檔即可。

php session 寫入失敗怎麼辦

本文操作環境: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

php session 寫入失敗怎麼辦

#問題描述

#我的程式碼寫入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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn