$_SESSION
変数はクライアントまたはサーバーに保存されていますか?
$_SESSION
変数ストレージの場所は、PHPのsession.save_path
構成によって決まります。通常、これはLinux/Unixシステムでは/tmp
です。 phpinfo()
関数を使用して、ドメインのDocumentRoot
にこのコンテンツを含むファイルを作成することにより、100%確実でない場合に特定の設定を表示します。
<?php
phpinfo();
?>
この構成設定に関するPHPドキュメントへのリンクは次のとおりです。
http://php.net/manual/en/session.configuration.php#ini.session.save-path
すでに述べたように、コンテンツはサーバーに保存されます。ただし、セッションはセッションIDによって識別されます。セッションIDはクライアントに保存され、各リクエストとともに送信されます。通常、セッションIDはCookieに保存されますが、URLに追加することもできます。 (これは、時々表示されるPHPSESSID
クエリパラメーターです)
通常、これらはサーバーに保存されます。それらが保存される場所は、開発者としてあなた次第です。 session.save_handler
構成変数と session_set_save_handler
を使用して、サーバーにセッションを保存する方法を制御できます。デフォルトの保存方法は、セッションをファイルに保存することです。それらが保存される場所は、session.save_path
変数によって制御されます。
1つの追加:「/ tmp」がセッションデータが保存されているディレクトリ(デフォルト値と思われる)の場合、「/ tmp」として、そのWebサーバーの再起動後にセッションは持続しないことに注意してください。多くの場合、再起動中に削除されます。クライアント単位の永続性の概念は、サーバー上のストレージの永続性に依存します。「/ tmp」ディレクトリがセッションデータに使用されている場合、これは失敗する可能性があります。
Ubuntuを使用しており、セッションは/ var/lib/php5に保存されています。
Debianでは(これはほとんどのLinuxディストリビューションに当てはまりませんか?)、/ var/lib/php5 /に保存されます。上記のように、php.iniで設定されます。
テイラー氏が指摘したように、これは通常php.iniで設定されます。通常、これらは特定のディレクトリにファイルとして保存されます。
Ubuntu 16.10の場合、セッションは/ var/lib/php/session/...に保存されます.
どのように機能しますか?私だとどうしてわかるの?
ほとんどのセッションは、ユーザーのコンピューターに765487cf34ert8dede5a562e4f3a7e12のようなユーザーキー(sessionidと呼ばれる)を設定します。次に、別のページでセッションが開かれると、コンピューターでユーザーキーをスキャンし、サーバーに実行して変数を取得します。
誤ってキャッシュをクリアすると、ユーザーキーもクリアされます。 IDがわからないため、サーバーから変数を取得できなくなります。