関数 | 説明 |
---|---|
session_start | 新しいセッションを開始、あるいは既存のセッションを再開する |
session_cache_expire | 現在のキャッシュの有効期限を返す |
session_cache_limiter | 現在のキャッシュリミッタを取得または設定する |
session_encode | 現在のセッションデータを、セッションエンコードされた文字列に変換する |
session_decode | セッションエンコードされた文字列からセッションデータをデコードする |
session_unset | すべてのセッション変数を開放する |
session_destroy | セッションに登録されたデータをすべて破棄する |
session_get_cookie_params | セッションクッキーのパラメータを取得する |
session_set_cookie_params | セッションクッキーのパラメータを設定する |
session_id | 現在のセッション ID を取得または設定する |
session_name | 現在のセッション名を取得または設定する |
session_save_path | 現在のセッションデータ保存パスを取得または設定する |
session_is_registered | 変数がセッションに登録されているかどうかを調べる |
session_module_name | 現在のセッションモジュールを取得または設定する |
session_regenerate_id | 現在のセッションIDを新しく生成したものと置き換える |
session_register_shutdown | セッションのシャットダウン関数 |
session_register | 現在のセッションに1つ以上の変数を登録する |
session_unregister | 現在のセッションから変数の登録を削除する |
session_set_save_handler | ユーザー定義のセッション保存関数を設定する |
session_status | 現在のセッションの状態を返す |
session_write_close | セッションデータを書き込んでセッションを終了する |
session_commit | session_write_close のエイリアス |
bool session_start ( void )PHP: session_start - Manual
session_start()は、すべての出力の前に実行される必要があります。これはセッションを開始するとき、PHPはセッションIDをクッキーに書き込むためで、setcookie()を使用する場合と同様の制約となります。
すでに作成されたセッションがあるときには、session_start()はセッションの再開となり、クッキーの書き込みは行われません。
session_start(); // セッション変数を削除 $_SESSION = array(); if( ini_get( 'session.use_cookies' ) ) { // セッション クッキーを削除 $params = session_get_cookie_params(); setcookie( session_name(), '', time() - 3600, $params[ 'path' ] ); } // セッション ファイルを削除 session_destroy();
セッションを確実に破棄するには、
を削除する必要があります。
セッション クッキーを削除するとき、ドキュメントではsetcookie(session_name(), '', time() - 42000,…)
のように42000秒前の時刻を指定するようにしています。しかしクッキーを削除するには過去の時刻を指定すれば良いだけですので、42000秒前である必要は何もありません。
セッションの情報へは、$_SESSION配列でアクセスできます。PHP: $_SESSION - Manual
$_SESSIONを使用するには、先にセッションが開始されている必要があります。それにはphp.iniでsession.auto_startを1に設定するか、さもなくばsession_start()を実行します。
セッションを開始させない、もしくは正常に開始されていない状態でセッション変数へアクセスすると、Notice: Undefined variable: _SESSIONとなります。
$_SESSION[ 'foo' ] = 100;
セッション変数はセッション中は有効です。よって異なるページで同一の名前のセッション変数を使用すると、上書きされることがあります。
unset( $_SESSION[ 'foo' ] );
unset( $_SESSION )
として、すべての$_SESSIONを破棄してはなりません。
これはセッション変数を破棄する方法です、セッションを破棄するのは別の方法です。
php.iniのsession.use_trans_sidが0となっている場合、セッションIDはクッキー (セッションクッキー) に保存されます。
セッションクッキーとは、セッションIDの保持に使用されるクッキーのことです。このクッキーは既定では、
属性 | 値 |
---|---|
名前 | PHPSESSID |
ドメイン | (サーバのホスト名) |
パス | / |
有効期限 | 0 (セッション終了時) |
となっており、session_get_cookie_params()でこの情報を確認できます。また名前 (セッション名) はsession_name()で取得できます。
session_set_cookie_params()は、php.iniで定義されたパラメータ
を設定します。そしてこのパラメータはクッキーを作成するときの初期値となるものであり、すでに作成されたクッキーには作用しません。よって、すでにクッキーが作成されている状態ではsession_set_cookie_params()は効果がなく、setcookie()で直接クッキーを書き換える必要があります。
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = FALSE [, bool $httponly = FALSE ]]]] )PHP: session_set_cookie_params - Manual
session_set_cookie_params()は、必ずsession_start()の前に実行します。
session_set_cookie_params( 600 ); session_start();
前述のように、この方法ではすでにセッションクッキーが作成されている場合には効果がありません。よって、
session_start(); setcookie( session_name(), session_id(), time() + 600 );
のように直接クッキーを設定します。このときsetookie()はsession_start()より後に実行する必要があります。さもなくばsession_id()で空文字列が返され、それで既存のセッションクッキーを上書きしてしまいます。
なおセッションクッキーの有効期限は既定では0秒となっており、これは「ブラウザを閉じるまで」の意味です。
ここで解説しているのはセッションクッキーの有効期限であり、セッションの有効期限はまた別です。セッションの有効期限はphp.iniのsession.gc_maxlifetimeで定義され、既定値は1440秒 (24分) です。session.gc_maxlifetime - Manual
セッションの有効期限 (タイムアウトまでの時間) を不用意に延ばすことは、セキュリティ面のリスクを高めることになります。