PHP Sessions(PHPにおけるセッションの基本)
HTTPプロトコルはステートレスなプロトコルであるため、状態を維持することができない。従って、サーバは2つの異なったリクエストが同じユーザによるものなのか判別できない。そこで登場したのがセッションである。
■セッション
セッションとは
- 基本的にはクッキーにIDを保存する形で実現される(但し、GETクエリにIDを保持する形式の場合もある)
- 一般的にはサーバ上にユーザ毎のファイルが生成されて管理される(但し、session_set_save_handler関数でDBなどに変更することもできる)
- セッションファイルの有効期限はphp.iniのsession.gc_maxlifetiomeディレクティブで変更する
- session_start関数を呼ぶと、デフォルトでキャッシュされないようになる(HTTPヘッダにCache-control: no-cacheが付加される)
- DNSラウンドロビンさせると維持できない。(NFSなどで共有する必要がある)
URLにIDを付加する形式にする方法
php.iniで以下のように記述する。(セキュリティリスクからデフォルトではoff)
session.use_trans_sid = on
セッションをスタートする方法
以下のように、session_start関数を使用する。但し、全ての出力よりも先に記述せねばならない。可読性の観点から、スクリプトの先頭部分に記述することをお勧めしたい。また、session_regenerate_id関数を使用することにより、セッションIDの固定化を防ぎ、よりセキュアなアプリケーションになる(セッションフィグゼーション)。
<?php session_start(); session_regenerate_id(true); ?>
また、以下のようにphp.iniのsession.auto_startディレクティブでも変更が可能である(デフォルトは0)。但し、この方法ではスクリプトが実行される前にセッションがスタートするため、セッションデータにユーザ定義オブジェクトのインスタンスを含めることはできない。
session.auto_start = 1
セッションに保存したデータを取り出す方法
以下のように、スーパーグローバル変数$_SESSIONを使用する。
<?php session_start(); session_regenerate_id(true);//setcookie('PHPSESID', 'new_id')のような効果 if(isset($_SESSION['key'])){ $_SESSION['key']++;//IDと対になったファイルへの変数の記録 } else{ $_SESSION['key'] = 1;//IDと対になったファイルへの変数の記録 } if(isset($_SESSION['key']) && $_SESSION['key'] % 2 === 0){ print('偶数' . $_SESSION['key']); } else{ print('奇数' . $_SESSION['key']); } ?>
あらゆるデータ型を保持(代入)できる。イメージとしてはスクリプトが終わっても保持される、ユーザベースの変数といった感じだ。デフォルトで簡単にセッション管理できるのが、個人的にPHPの好きなところだ。
TrackBack URL :
Comments (0)
コメントはまだありません»
No comments yet.
RSS feed for comments on this post.TrackBack URL
Leave a comment