Ext JSやRapid Driveなど
システム開発の技術情報をご紹介。

お問い合わせ 資料請求 無料見積り

お電話でお気軽にお問い合わせくださいTel 03-6805-2904 営業時間 [平日]AM 9:30 - PM 6:30

セッション管理

セッション管理について

セッション関数

セッション名の設定
session_name( name );

session_name()関数を使用して、現在のセッション名を取得、または設定することができます。

セッション名は、セッションIDを受け渡すためのクッキー名やURLパラメータ名などに利用します。

セッションを開始した際に、クライアントのクッキー名として「PHPSESSID」を利用することが、「php.ini」のデフォルト値で設定されています。「php.ini」を直接変更することでも、デフォルト値の変更ができます。

php.ini

実際に、session_name()関数を使用して、現在のセッション名を取得してみます。

現在のセッション名を取得する
<?php
    session_start();
    session_name();

    echo "現在のセッション名は ". session_name() ." です。";
?>
実行結果
現在のセッション名は PHPSESSID です。

session_name()関数を引数無しで使用すると、現在のセッション名が取得できます。

そして、引数を指定した場合は、現在のセッション名が変更されます。

なお、セッション名を変更する際、session_start()関数よりも前に呼び出す必要があり、かつセッション名は英数字のみ(数字のみは不可)で構成されている必要があります。

現在のセッション名を変更する
<?php
    session_name( "newsession" );
    session_start();

    echo "現在のセッション名は ". session_name() ." です。";
?>
実行結果
現在のセッション名は newsession です。
セッションIDの設定
session_id( string id );

session_id()関数を使用して、現在のセッションIDを取得、または設定することができます。

session_id()関数を引数無しで使用すると、現在のセッションIDが取得できます。注)引数を指定した場合は、現在のセッションID名が変更されます。

セッションID名を変更する際、session_start()関数よりも前に呼び出す必要があり、かつセッションID名は、「a-z」「 A-Z」「 0-9」で構成されている必要があります。

注)セッション保持にクッキーを使用している場合は、session_id()関数の引数を指定すると、現在のセッションID と、引数でセットされるセッションIDとがまったく同一であるかどうかに関わらず、session_start()が呼び出される際、常に新しいクッキーが送信されます。

セッションIDの表示と変更
<?php
    session_start();

    echo session_id();
    echo "->";

    session_id( "a0b1c2d3e4" );

    echo session_id();
?>
実行結果
18924741a20ab2ab2108577ab9492aba->a0b1c2d3e4

上記のスクリプトのように、自動的に取得するセッションIDを任意の文字列に変更することができます。ただし、第3者が簡単に推測できてしまうセッションID名に変更すると、他人にセッションを乗っ取られるといった可能性があります。

そこで、セッションIDを絶えず変更させることのできるsession_regenerate_id()関数を使用してセッションIDの推測を防ぎ、セキュリティを向上させるといったことができます。

なお、セッションID変更後も、現在のセッション情報はしっかり維持されます。

session_regenerate_id( [ bool delete_old_session ] )

session_regenerate_id()関数は、現在使用しているセッションを終了させることなく、セッションIDだけを新しい値に置き換えます。

PHP5.1 以降になってからは、セッションID変更後、古いセッション情報を同時に削除することが、引数の指定でできるようになりました。古いセッション情報を残しておくことはセキュリティ的にもよくありません。引数の「delete_old_session」をTRUEに指定することで、古いセッションを削除することができます。

セッションIDの自動変更
<?php
    session_start();
    $old_id = session_id();

    session_regenerate_id();
    $new_id = session_id();

    echo "変更前のセッションIDは ". $old_id ." です。&#8249;br /&#8250;n";
    echo "今現在のセッションIDは ".$new_id ." です。";
?>
実行結果
変更前のセッションIDは 18924741a20ab2ab2108577ab9492aba です。
今現在のセッションIDは 52fc5ca1b96555745795cde0cd956d25 です。

ブラウザの再読み込みを行うと、下記のようにセッションIDが随時変更されていくことが確認できます。

ブラウザの再読み込み
変更前のセッションIDは 52fc5ca1b96555745795cde0cd956d25 です。
今現在のセッションIDは 24d207e1965151916f0cdfaa6b3dfa6d です。
ブラウザの再読み込み
変更前のセッションIDは 24d207e1965151916f0cdfaa6b3dfa6d です。
今現在のセッションIDは a891e3b4a0b840e1ac74f268cbbf14e6 です。
セッション用データ保存先を変更する

session_save_path()関数を使用して、現在のセッション用のデータが保存されているディレクトリのパスを取得、または保存先ディレクトリを変更することができます。

session_save_path()関数を引数無しで使用すると、現在の保存先ディレクトリまでのパスが取得できます。引数を指定した場合は、指定したパスが保存先となります。

なお、保存先を変更する際、session_start()関数よりも前に呼び出す必要があります。

セッションデータの保存先ディレクトリを変更する
<?php
    session_save_path( "/temp" );
    session_start();

    echo "現在のセッションデータは". session_save_path() ."に保存されています。";
?>
実行結果
現在のセッションデータは/tempに保存されています。
セッション用データ保存先を確認する

session_save_path()関数を使用して、現在のセッション用のデータが保存されているディレクトリのパスを取得してみます。

セッションデータの保存先ディレクトリを確認する
<?php
    session_save_path( );
    session_start();

    echo "現在のセッションデータは". session_save_path() ."に保存されています。";
?>
実行結果
現在のセッションデータはC:\xampp\tmpに保存されています。

上記のスクリプトの「session_save_path( );」からセッションデータ保存先のパスがわかりました。