web-dev-qa-db-ja.com

memcacheおよびmemcachedセッションが持続しない

そのため、別の既存のアプリケーションがmemcacheドライバーを使用しているのに、memcachedphpドライバーを使用しているアプリケーションでセッションが永続化するという問題が発生しています。

サーバーに、両方がインストールされているのがわかります

また、php構成で、登録済みの保存ハンドラーにmemcacheとmemcachedの両方が含まれていることがわかりますが、「session.save_handler」php構成値はmemcacheに設定されています。

それが、memcachedドライバーを使用しようとしているアプリケーションでセッションが機能しない理由でしょうか?または、memcachedはデフォルトではありませんが、登録済みの保存ハンドラーであるため、これも機能するはずです。

Memcachedドライバーを使用しているときにキャッシュを正常に保存しているので、memcachedデーモンと接続が機能していることがわかります。

この問題をトラブルシューティングするにはどうすればよいですか?エラーが発生したり、どこかにログが記録されたりする可能性がありますか?

1
Alexo

Session.gc_maxlifetime設定を確認してください。 60 * 60 * 24 * 30より大きいものは、PHPが保存した直後に、memcacheがセッションキーを期限切れにします。

Memcacheプロトコルは、60 * 60 * 24 * 30より大きい数値は、現在の時刻からのオフセットではなく、絶対UNIX時間として扱われることを指定しています。

一部のコマンドには、クライアントがサーバーに何らかの有効期限(アイテムまたはクライアントによって要求された操作に関連する)を送信することが含まれます。このような場合、送信される実際の値は、Unix時間(1970年1月1日からの秒数、32ビット値)または現在の時刻からの秒数のいずれかです。後者の場合、この秒数は60 * 60 * 24 * 30(30日間の秒数)を超えてはなりません。クライアントから送信された数値がそれよりも大きい場合、サーバーはそれを現在の時刻からのオフセットではなく、実際のUnix時間の値と見なします。

https://github.com/memcached/memcached/blob/e31a591210311d0658a90a86f71563fa6d7b095c/doc/protocol.txt#L79 を参照してください)

PHPセッションハンドラーは、セッションキーの有効期限としてsession.gc_maxlifetimeを使用するだけで、変更は行いません。

詳細: http://rcmachado.github.io/php/memcache/2014/07/23/php-memcached-gotchas.html (開示:投稿を書きました)。

1
rcmachado