|
実行時設定
php.ini の設定により動作が変化します。
INI_* モードの詳細および定義については
どこで設定を行うのか を参照してください。
セッション管理システムは、php.iniファイルに記述可能な多くの設定オ
プションをサポートします。以下に概要を示します。
-
session.save_handler
string
-
session.save_handler は、
セッションに関連するデータの保存および取得時に使用するハンドラを定義します。
デフォルトは、files です。各拡張モジュールで、
独自の save_handler を使用できることに注意しましょう。
インストール環境単位で登録されているハンドラを取得するには
phpinfo を使用します。
session_set_save_handler も参照ください。
-
session.save_path
string
-
session.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 はプレーンな serialize/unserialize
関数を内部的に使っており、php や php_binary
のような制約はありません。これらのシリアライズハンドラでは、$_SESSION
の中で数値のインデックスや特殊文字
(| や ! )
を含む文字列のインデックスを使えませんでした。
php_serialize を使えば、
スクリプトの終了時に数値インデックスや特殊文字インデックスのエラーが出ないようにできます。
デフォルトは php です。
-
session.gc_probability
int
-
session.gc_probability と
session.gc_divisor の組み合わせでgc
(ガーベッジコレクション)ルーチンの始動を制御します。
デフォルトは、1 です。
0 以上の値でなければいけません。
詳細は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 です。
0 より大きな値でなければいけません。
-
session.gc_maxlifetime
int
-
session.gc_maxlifetime は、データが
'ごみ' とみなされ、消去されるまでの秒数を指定します。
ガベージコレクション (ごみの収集) は、
セッションの開始時に行われます (session.gc_probability と
session.gc_divisor
に依存します)。
デフォルトは 1440 (24分) です。
注意:
異なる値を session.gc_maxlifetime に指定している
別々のスクリプトがセッションデータの保存場所を共有している場合、
一番小さい設定値に達した時点でデータが消去されます。このような場合には、
お互いに session.save_path
を使用します。
-
session.referer_check
string
-
session.referer_check には、HTTP Referer に
おいて確認を行う文字列を指定します。Refererがクライアントにより
送信されており、かつ、指定した文字列が見付からない場合、埋め込
まれたセッションIDは無効となります。デフォルトは空の文字列です。
-
session.entropy_file
string
-
session.entropy_file は、
セッションIDを作成する際の別のエントロピーソースとして使用する
外部リソースへのパスを指定します。
例としては、多くの UNIX で利用可能な /dev/random
または /dev/urandom があげられます。
この機能は、Windows でもサポートされています。
session.entropy_length にゼロ以外の値を設定すると、
PHP は Windows Random API をエントロピーソースとして使います。
注意:
PHP 7.1.0 で削除されました。
/dev/urandom あるいは /dev/arandom
が使えるときは、
それが session.entropy_file のデフォルトになります。
-
session.entropy_length
int
-
session.entropy_length は、前記のファイルから
読みこむバイト数を指定します。デフォルトは、32
です。
PHP 7.1.0 で削除されました。
-
session.use_strict_mode
bool
-
session.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
に埋め込む攻撃を防ぐことができます。
デフォルトは 1 (有効) となります。
-
session.cookie_lifetime
int
-
session.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
-
クッキーはセキュアな接続を通じてのみ送信すべきものです。
このオプションを
on にすると、
セッションは HTTPS 接続の場合にのみ動作します。
off の場合には、HTTP と HTTPS 接続の両方で動作します。
デフォルトは off です。
-
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
bool
-
session.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
string
-
session.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.sid_length
int
-
session.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
int
-
session.sid_bits_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
mixed
-
session.hash_function によりセッション ID
を生成するために使用されるハッシュアルゴリズムを指定することが可能です。
'0' は MD5 (128 ビット) で、'1' は SHA-1 (160 ビット) を意味します。
hash 拡張モジュール
の任意のアルゴリズムが (この拡張モジュールが使用可能な場合に)
指定できます。たとえば
sha512 や
whirlpool などです。
サポートされているアルゴリズムの一覧は、
hash_algos 関数で取得できます。
注意:
この設定は、PHP 7.1.0 で削除されました。
-
session.hash_bits_per_character
int
-
session.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 で、この機能は有効になっています。
アップロードの進捗は、
session.upload_progress.enabled を有効にして
$_POST[ini_get("session.upload_progress.name")] を設定するまでは登録されません。
この機能の詳細は セッションのアップロードの進捗
を参照ください。
|