ホームページ  >  記事  >  バックエンド開発  >  PHPセッションの書き込みに失敗した場合の対処方法

PHPセッションの書き込みに失敗した場合の対処方法

藏色散人
藏色散人オリジナル
2021-07-09 10:16:023118ブラウズ

セッションが誤って memcache に保存されたため、php セッションの書き込みに失敗しました。解決策は、セッションを redis に保存し、php 構成ファイルを変更することです。

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

PHPセッションの書き込みに失敗した場合の対処方法

問題の説明

コードをセッションに書き込むときにこの問題を報告し続けます。環境は 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。