実行時設定
php.ini
の設定により動作が変化します。
名前 | デフォルト | 変更可能 | 変更履歴 |
---|---|---|---|
session.save_path | "" | PHP_INI_ALL | |
session.name | "PHPSESSID" | PHP_INI_ALL | |
session.save_handler | "files" | PHP_INI_ALL | |
session.auto_start | "0" | PHP_INI_PERDIR | |
session.gc_probability | "1" | PHP_INI_ALL | |
session.gc_divisor | "100" | PHP_INI_ALL | |
session.gc_maxlifetime | "1440" | PHP_INI_ALL | |
session.serialize_handler | "php" | PHP_INI_ALL | |
session.cookie_lifetime | "0" | PHP_INI_ALL | |
session.cookie_path | "/" | PHP_INI_ALL | |
session.cookie_domain | "" | PHP_INI_ALL | |
session.cookie_secure | "" | PHP_INI_ALL | |
session.cookie_httponly | "" | PHP_INI_ALL | PHP 5.2.0 から利用可能 |
session.cookie_samesite | "" | PHP_INI_ALL | PHP 7.3.0 から利用可能 |
session.use_strict_mode | "0" | PHP_INI_ALL | PHP 5.5.2 から利用可能 |
session.use_cookies | "1" | PHP_INI_ALL | |
session.use_only_cookies | "1" | PHP_INI_ALL | |
session.referer_check | "" | PHP_INI_ALL | |
session.cache_limiter | "nocache" | PHP_INI_ALL | |
session.cache_expire | "180" | PHP_INI_ALL | |
session.use_trans_sid | "0" | PHP_INI_ALL | |
session.trans_sid_tags | "a=href,area=href,frame=src,form=" | PHP_INI_ALL | PHP 7.1.0 から利用可能 |
session.trans_sid_hosts | $_SERVER['HTTP_HOST']
|
PHP_INI_ALL | PHP 7.1.0 から利用可能 |
session.sid_length | "32" | PHP_INI_ALL | PHP 7.1.0 から利用可能 |
session.sid_bits_per_character | "4" | PHP_INI_ALL | PHP 7.1.0 から利用可能 |
session.hash_function | "0" | PHP_INI_ALL | PHP 5.0.0 から利用可能。PHP 7.1.0 で削除されました。 |
session.hash_bits_per_character | "4" | PHP_INI_ALL | PHP 5.0.0 から利用可能。PHP 7.1.0 で削除されました。 |
session.upload_progress.enabled | "1" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.upload_progress.cleanup | "1" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.upload_progress.prefix | "upload_progress_" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.upload_progress.freq | "1%" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.upload_progress.min_freq | "1" | PHP_INI_PERDIR | PHP 5.4.0 から利用可能 |
session.lazy_write | "1" | PHP_INI_ALL | PHP 7.0.0 から利用可能 |
url_rewriter.tags | "a=href,area=href,frame=src,form=" | PHP_INI_ALL | PHP 7.1.0 以降は、セッションではこの項目を使いません。 |
session.hash_function | "0" | PHP_INI_ALL | PHP 7.1.0 で削除されました。 |
session.hash_bits_per_character | "4" | PHP_INI_ALL | PHP 7.1.0 で削除されました。 |
session.entropy_file | "" | PHP_INI_ALL | PHP 7.1.0 で削除されました。 |
session.entropy_length | "0" | PHP_INI_ALL | PHP 7.1.0 で削除されました。 |
session.bug_compat_42 | "1" | PHP_INI_ALL | PHP 5.4.0 で削除されました。 |
session.bug_compat_warn | "1" | PHP_INI_ALL | PHP 5.4.0 で削除されました。 |
PHP_INI_* モードの詳細および定義については
どこで設定を行うのか を参照してください。
セッション管理システムは、php.ini
ファイルに記述可能な多くの設定オ
プションをサポートします。以下に概要を示します。
session.save_handler
string-
session.save_handler
は、 セッションに関連するデータの保存および取得時に使用するハンドラを定義します。 デフォルトは、files
です。各拡張モジュールで、 独自のsave_handler
を使用できることに注意しましょう。 インストール環境単位で登録されているハンドラを取得するには phpinfo() を使用します。 session_set_save_handler() も参照してください。 session.save_path
stringsession.save_path
は、保存ハンドラに渡される 引数を定義します。デフォルトのファイルハンドラを選択した場合、 ファイルが作成される場所のパスになります。 session_save_path() も参照ください。オプションの引数として
N
(数値)を指定できます。 これはセッションファイルを分散して保存する際に ディレクトリ階層レベルを決定します。 例えば、'5;/tmp'
とすると/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If
という位置にセッションファイルを生成します。N
を使用するには、これらすべてのディレクトリが 事前に作成されている必要があります。 そのためのシェルスクリプトがext/session
にmod_files.sh
というファイル名であります。 Windows 版のmod_files.bat
もあります。 また、0以上のN
が指定されている場合には自動ガーベッジコレクション が機能しないことに注意してください。詳細はphp.ini
を見てください。 また、N
を指定する場合は、session.save_path
を"quotes"で囲う必要があります。 なぜならセパレータ(;
) はphp.ini
ではコメントとしても利用されているからです。ファイルストレージモジュールが作るファイルのモードは、デフォルトで 600 になります。 このデフォルトを変更するには、オプションの引数
MODE
を利用します。N;MODE;/path
のように使い、MODE
の部分に八進形式のモードを指定します。MODE
を設定しても、そのプロセスの umask は変わりません。警告
この設定を
/tmp
(デフォルト) のようにどこか らでも読み込み可能なディレクトリに設定した場合、サーバー上 の他のユーザーがこのディレクトリのファイルのリストを取得すること により、セッションをハイジャックをすることが可能となります。警告
オプションのディレクトリレベル定数
N
で、 1 あるいは 2 以外の値を使うのは、大半のサイトでは不適切です。 大量のディレクトリが必要になってしまうからです。たとえば、この値を 3 にすると、 ファイルシステム上のディレクトリの数が(2 ** session.sid_bits_per_character) ** 3
にもなり、 ディスク容量や inode の無駄遣いになってしまいます。N
を 2 より大きくするのは、 それを必要とするような大規模サイトに限るようにしましょう。session.name
string-
session.name
はセッション名を指定し、 クッキー名として使用されます。 アルファベット文字のみで指定する必要があります。 デフォルトは、PHPSESSID
です。 session_name()も参照してください。 session.auto_start
bool-
session.auto_start
はリクエスト開始時に セッションモジュールがセッションを自動的に開始するかどうかを 指定します。デフォルトは、0
(無効)です。 session.serialize_handler
string-
session.serialize_handler
は、シリアル化または シリアル化データを復元するために使用されるハンドラの名前を定義します。 PHP シリアライズフォーマット (php_serialize
)、 PHP 内部フォーマット (php
あるいはphp_binary
)、 そして WDDX (wddx
) に対応しています。WDDX は、PHP がWDDX サポート を有効にしてコンパイルされている場合のみ使用可能です。php_serialize
は PHP 5.5.4 以降で使用可能です。php_serialize
はプレーンな serialize/unserialize 関数を内部的に使っており、php
やphp_binary
のような制約はありません。これらのシリアライズハンドラでは、$_SESSION の中で数値のインデックスや特殊文字 (|
や!
) を含む文字列のインデックスを使えませんでした。php_serialize
を使えば、 スクリプトの終了時に数値インデックスや特殊文字インデックスのエラーが出ないようにできます。 デフォルトはphp
です。 session.gc_probability
int-
session.gc_probability
とsession.gc_divisor
の組み合わせでgc (ガーベッジコレクション)ルーチンの始動を制御します。 デフォルトは、1
です。 詳細はsession.gc_divisor をご覧ください session.gc_divisor
int-
session.gc_divisor
とsession.gc_probability
の組み合わせで すべてのセッションの初期化過程でgc(ガーベッジコネクション)プロセス も始動する確率を制御します。確率は gc_probability/gc_divisor で計算されます。例えば、1/100は各リクエスト毎に1%の確率でGCプロセスが 始動します。session.gc_divisor
のデフォルトは100
です。 session.gc_maxlifetime
intsession.gc_maxlifetime
は、データが 'ごみ' とみなされ、消去されるまでの秒数を指定します。 ガベージコレクション (ごみの収集) は、 セッションの開始時に行われます (session.gc_probability と session.gc_divisor に依存します)。注意:
異なる値を
session.gc_maxlifetime
に指定している 別々のスクリプトがセッションデータの保存場所を共有している場合、 一番小さい設定値に達した時点でデータが消去されます。このような場合には、 お互いに session.save_path を使用します。session.referer_check
string-
session.referer_check
には、HTTP Referer に おいて確認を行う文字列を指定します。Refererがクライアントにより 送信されており、かつ、指定した文字列が見付からない場合、埋め込 まれたセッションIDは無効となります。デフォルトは空の文字列です。 session.entropy_file
stringsession.entropy_file
は、 セッションIDを作成する際の別のエントロピーソースとして使用する 外部リソースへのパスを指定します。 例としては、多くの UNIX で利用可能な/dev/random
または/dev/urandom
があげられます。 この機能は、Windows では PHP 5.3.3 以降で対応します。session.entropy_length
にゼロ以外の値を設定すると、 PHP は Windows Random API をエントロピーソースとして使います。注意:
PHP 7.1.0 で削除されました。 PHP 5.4.0 以降では、
/dev/urandom
あるいは/dev/arandom
が使えるときはそれをsession.entropy_file
のデフォルトとするようになりました。 それまでのバージョンでは、このディレクティブのデフォルトは空でした。session.entropy_length
int-
session.entropy_length
は、前記のファイルから 読みこむバイト数を指定します。デフォルトは、32
です。 PHP 7.1.0 で削除されました。 session.use_strict_mode
boolsession.use_strict_mode
は、 厳格なセッション ID モードを利用するかどうかを指定します。 有効にすると、初期化していないセッション ID を受け付けなくなります。 初期化していないセッション ID がブラウザから送信された場合は、 新しいセッション ID をブラウザに送り返します。 このモードを利用すると、セッションアダプションを利用したセッション固定攻撃からアプリケーションを保護できます。 デフォルトは0
(無効) です。注意:
一般的なセッションのセキュリティを踏まえると、
session.use_strict_mode
を有効にしておく必要があります。 すべてのサイトでこれを有効にすることを推奨します。 詳細は session_create_id() のサンプルコードを参照ください。警告
カスタムのセッションハンドラが session_set_save_handler() 経由で登録され、 それが SessionUpdateTimestampHandlerInterface::validateId() を実装せず、
validate_sid
コールバックを提供しない場合、 このディレクティブの値に関わらず、厳格なセッションIDモードは無効になります。 SessionHandler クラスは SessionHandler::validateId() を実装して いない ことに特に注意して下さい。session.use_cookies
bool-
session.use_cookies
によりクライアント側にセッ ションIDを保存する際にクッキーを使用するかどうかを指定します。デ フォルトは1
(有効)です。 session.use_only_cookies
bool-
session.use_only_cookies
は、 このモジュールがクライアント側へのセッション ID の保存に Cookie のみ を使用することを指定します。 この設定を有効にすることにより、セッション ID を URL に埋め込む攻撃を防ぐことができます。 PHP 5.3.0 以降で、デフォルトは1
(有効) となります。 session.cookie_lifetime
intsession.cookie_lifetime
は、 ブラウザに送信するクッキーの有効期間を秒単位で指定します。 0 を指定すると "ブラウザを閉じるまで" という意味になります。 デフォルトは、0
です。 session_get_cookie_params() および session_set_cookie_params() も参照してください。注意:
有効期限のタイムスタンプは、サーバーの時刻に基づいて決まります。 クライアントのブラウザの時刻がこれと同じであるとは限りません。
session.cookie_path
string-
session.cookie_path
によりセッションクッキーで設定するパスを指定します。 デフォルトは/
です。 session_get_cookie_params()および session_set_cookie_params()も参照してください。 session.cookie_domain
string-
session.cookie_domain
によりセッションクッキーで指定するドメインを指定します。 デフォルトでは指定されません。 この場合は、クッキーの仕様によって、クッキーを作成したサーバーの ホスト名が指定されます。 session_get_cookie_params() および session_set_cookie_params() も参照ください。 session.cookie_secure
bool-
session.cookie_secure
は、 セキュアな接続を通じてのみCookieを送信できるかどうかを指定します。 デフォルトは、off
です。 session_get_cookie_params()および session_set_cookie_params()も参照してください。 session.cookie_httponly
bool- クッキーに対して、HTTP を通してのみアクセスできるようにします。 つまり、JavaScript のようなスクリプト言語からはアクセスできなくなるということです。 この設定を使用すると、XSS 攻撃によって ID を盗まれる危険性を減らせます (が、すべてのブラウザがこの設定をサポートしているというわけではありません)。
session.cookie_samesite
string-
クロスサイトリクエストで、サーバーにクッキーを送信しないよう指示できるようにします。
これを用いると、ユーザーエージェントによる生成元とは異なる場所への情報漏洩のリスクを軽減できます。
また、CSRF攻撃に対する防御策のひとつにもなります。
この仕組みはすべてのブラウザがサポートしているわけではないことに注意しましょう。
この項目に空の値を設定した場合は、クッキーのSameSite属性は送信されません。
Lax
やStrict
を設定した場合は、 サイトをまたがる POST リクエストではクッキーを送信しません。GET リクエストの場合は、Lax
はサイトをまたがるリクエストでもクッキーを送信しますが、Strict
は送信しません。 session.cache_limiter
string-
session.cache_limiter
により、セッションページにおけるキャッシュ制御の方法を指定します。nocache
、private
、private_no_expire
あるいはpublic
のいずれかとなります。デフォルトはnocache
です。 これらの値の意味については session_cache_limiter() のドキュメントも参照ください。 session.cache_expire
int-
session.cache_expire
によりキャッシュされた セッションページの有効期間を分単位で指定します。 このオプションは、nocacheリミッタに関しては効果がありません。 デフォルトは、180
です。 session_cache_expire()も参照してください。 session.use_trans_sid
boolsession.use_trans_sid
は、透過的なセッション IDの付加をするかどうかを指定します。 デフォルトは、0
(無効)です。注意:
URLに基づくセッション管理は、Cookieに基づくセッション管理と比べ てセキュリティリスクが大きくなります。例えば、ユーザーは、emailに より友人にアクティブなセッションIDを含むURLを送信する可能性があ り、また、ユーザーは自分のブックマークにセッションIDを含むURLを保 存し、常に同じセッションIDで使用するサイトにアクセスする可能性 があります。 PHP 7.1.0 以降では、https://php.net/ のような完全な URL パスが、透過的セッションID機能で扱われるようになります。 これより前のバージョンでは、相対 URL パスだけが対象でした。 リライト対象のホストは session.trans_sid_hosts で定義します。
session.trans_sid_tags
stringsession.trans_sid_tags
は、透過的セッションIDのサポートが有効な場合にどの HTML タグをリライトするかを指定します。 デフォルトはa=href,area=href,frame=src,input=src,form=
です。form
は特別なタグで、<input hidden="session_id" name="session_name">
がフォーム変数に追加されます。注意:
PHP 7.1.0 より前のバージョンでは、この目的で使われていた設定項目は url_rewriter.tags でした。 PHP 7.1.0 以降は、
fieldset
が特別なタグとはみなされなくなります。session.trans_sid_hosts
string-
session.trans_sid_hosts
は、 は、透過的セッションIDのサポートが有効な場合にどのホストをセッションIDつきにリライトするかを指定します。 デフォルトは$_SERVER['HTTP_HOST']
です。 複数のホストを指定する場合は "," で区切ってつなぎます。 ホストとホストの間にスペースを入れることはできません。つまり、たとえばphp.net,wiki.php.net,bugs.php.net
のように指定します。 session.bug_compat_42
boolPHP バージョンが 4.2.3 とそれ以前には、たとえ register_globals が無効の場合でもグローバルスコープでセッション変数の初期化を 許してしまうドキュメント化されていない特徴/バグがあります。 この機能を使用している場合で session.bug_compat_warn も有効にしている場合、 PHP 4.3.0 とそれ以降のバージョンでは警告が発されます。 この特徴/バグは、 このディレクティブを無効にすることで無効にすることが可能です。
注意:
PHP 5.4.0 で削除されました。
session.bug_compat_warn
boolPHP バージョンが 4.2.3 とそれ以前には、たとえ register_globals が無効の場合でもグローバルスコープでセッション変数の初期化を 許してしまうドキュメント化されていない特徴/バグがあります。 この機能を session.bug_compat_42 と session.bug_compat_warn を有効にして使用している場合、 PHP 4.3.0 とそれ以降のバージョンでは警告が発されます。
注意:
PHP 5.4.0 で削除されました。
session.sid_length
intsession.sid_length
は、セッション ID 文字列の長さを指定します。 22 から 256 までの値が使えます。 デフォルトは 32 です。互換性を考慮するなら 32 や 40 などを使ってもかまいません。 セッション ID は長ければ長いほど推測されにくくなります。少なくとも 32 を指定することを推奨します。ヒント
互換性に関するメモ:
session.hash_function
=0 (MD5) でsession.hash_bits_per_character
=4 の場合、あるいはsession.hash_function
=1 (SHA1) でsession.hash_bits_per_character
=6 の場合は 32 を使います。session.hash_function
=0 (MD5) でsession.hash_bits_per_character
=5 の場合は、26 を使います。session.hash_function
=0 (MD5) でsession.hash_bits_per_character
=6 の場合は、22 を使います。 INI 設定で、セッション ID を少なくとも 128 ビットにしておく必要があります。session.sid_bits_per_character
に適切な値を指定することを忘れないようにしましょう。 そうしないと、脆弱なセッション ID を使うことになってしまいます。注意:
この設定は PHP 7.1.0 で導入されました。
session.sid_bits_per_character
intsession.sid_per_character
エンコードされたセッション ID 文字のビット数を指定します。指定できる値は '4' (0-9, a-f)、'5' (0-9, a-v)、'6' (0-9, a-z, A-Z, "-", ",") です。 デフォルトは 4 です。大きいほどセッション ID が強力になります。 大半のシステムでは、5 を推奨します。注意:
この設定は PHP 7.1.0 で導入されました。
session.hash_function
mixedsession.hash_function
によりセッション ID を生成するために使用されるハッシュアルゴリズムを指定することが可能です。 '0' は MD5 (128 ビット) で、'1' は SHA-1 (160 ビット) を意味します。PHP 5.3.0 以降では、hash 拡張モジュール の任意のアルゴリズムが (この拡張モジュールが使用可能な場合に) 指定できるようになります。たとえば
sha512
やwhirlpool
などです。 サポートされているアルゴリズムの一覧は、 hash_algos() 関数で取得できます。注意:
この設定は、PHP 7.1.0 で削除されました。
session.hash_bits_per_character
intsession.hash_bits_per_character
により バイナリのハッシュデータを何らかの可読なデータに変換する際、 それぞれの文字に何ビットストアさせるかを定義することが可能です。 指定可能な値は、'4' (0-9, a-f)、'5' (0-9, a-v) そして '6' (0-9, a-z, A-Z, "-", ",") です。注意:
この設定は、PHP 7.1.0 で削除されました。
session.upload_progress.enabled
bool-
アップロードの進捗を追跡して
$_SESSION
変数に格納するかどうか。 デフォルトは 1 で、この機能は有効になっています。 session.upload_progress.cleanup
boolすべての POST データを読み終えた (つまり、アップロードが完了した) 時点ですぐに進捗状況を消去するかどうか。 デフォルトは 1 で、この機能は有効になっています。
注意:
この機能を有効にしておくことを強くおすすめします。
session.upload_progress.prefix
string-
アップロードの進捗を
$_SESSION
で管理するときに使うキーのプレフィックス。 このキーを$_POST[ini_get("session.upload_progress.name")]
の値と連結して、一意なインデックスを作ります。 デフォルトは "upload_progress_" です。 session.upload_progress.name
string-
進捗情報を
$_SESSION
に格納するときに使うキーの名前。 session.upload_progress.prefix も参照ください。$_POST[ini_get("session.upload_progress.name")]
が渡されていない場合や存在しない場合は、アップロードの進捗を記録しません。 デフォルトは "PHP_SESSION_UPLOAD_PROGRESS" です。 session.upload_progress.freq
mixed- アップロードの進捗を更新する頻度を定義します。 バイト数 (100 バイトごとに進捗を更新するなど) あるいはパーセンテージ (ファイル全体のサイズの 1% ごとに進捗を更新するなど) で指定できます。 デフォルトは "1%" です。
session.upload_progress.min_freq
int- 更新間隔の最小値。単位は秒。 デフォルトは "1" (1 秒) です。
session.lazy_write
bool-
session.lazy_write
を 1 に設定すると、 セッションのデータが変更されたときにだけ再書き込みを行います。 デフォルトは 1 で、この機能は有効になっています。
register_globals
設定は、セッション変数の保存および回復方法に影響を与えます。
アップロードの進捗は、 session.upload_progress.enabled を有効にして $_POST[ini_get("session.upload_progress.name")] を設定するまでは登録されません。 この機能の詳細は セッションのアップロードの進捗 を参照ください。