セッション : PHP

Pocket

セッションをPHPで利用する際の覚書。

セッションとは

セッション機能はクライアントのクッキーはユーザーを識別するセッションIDだけを保持しほかの情報はセッションIDをもとにサーバー側で保持する機能。セッション機能を使うとクッキーはセッションID除くユーザー情報を保持する必要がない。

※ PHPはデフォルトのセッションIDをCookieのPHPSESSIDに持たせる。

セッションを開始

session_start関数

注 session_start() は、セッションを作成します。 (もしくは、リクエスト上でGET,POSTまたはクッキーにより渡されたセッションIDセッショ ンに基づき現在のセッションを復帰します)
名前付きのセッションを使用したい場合、 session_start()の前に session_name()をコールする必要があります。
この関数は常に TRUE を返します。

ブラウザに何か出力を行う前にsession_start()をコールする必要がる。

セッションの初期設定

以下の関数は全てsession_startの前に呼び出す必要がある。

session_name関数

引数を指定せずに呼び出すと現在のセッション名を返す(※デフォルトではPHPSESSID)。
引数を指定して呼び出すと指定した値にセッション名が変更される。

セッション名は、リクエストが開始された際に セッション名に保存された session.name の デフォルト値にリセットされます。よって、各リクエスト毎に(そして session_start() または session_register() をコールする前に) session_name() をコールする必要があります。

session_id関数

引数を指定せずに呼び出すと現在のセッションIDが返される。
引数を指定して呼び出すとその値にセッションIDが設定される。

session_save_path関数

セッションデータの保存パスが返される。
デフォルトのセッションデータの保存パスは/tmpでありWindowsの場合C:\tmpになる。
セッションデータに値を設定する方法はセッションデータを保存するの項目を参照。

セッションID(PHPSESSID)自体はWindows XPの場合C:\Documents and Settings\USERNAME\Cookiesディレクトリに保存される。

session_set_cookie_params関数

ファイルphp.iniで定義されたクッキーパラメータを設定します。 この関数の効果が持続するのは、スクリプトの実行が終了するまでです。 したがって、リクエスト毎や session_start() がコールされる前に session_set_cookie_params() をコールする必要があります。

セッションデータを保存する

$_SESSION['name'] = $value

session_save_pathで設定したパスに作成されるファイルに内容が保存される。

ページ間でのセッションIDの受け渡し

複数ページで同一セッションを維持するためにはページ間でセッションIDを受け渡す必要がある。セッションIDの受け渡しは大きく2つの状況に分類できる。

  1. ブラウザのCookieが有効な場合
  2. ブラウザのCookieが無効な場合

Cookieが有効な場合

Cookieによって自動的にセッションIDの受け渡しが行われる。

Cookieが無効な場合

Cookieが無効な場合はsession.use_trans_sidの値によって更に2つの場合に分類される。

session.use_trans_sidの値が1の場合

URL Rewriting機能が有効になり、URLのクエリとしてPHPSESSID=セッションIDが自動的に付与される。またHTMLフォームの場合はhiddenによりセッションIDが自動的に渡される。

session.use_trans_sidの値が0の場合

URL Rewriting機能が無効になり自動的にセッションIDが受け渡されることはない。コードで明示的に受け渡しを行う。

php.iniの設定

php.iniのセッションに関係する設定はセッション処理関数 実行時設定を参照。

セキュリティー関係

session.auto_start

offの場合は、セッションを開始・継続するには明示的にsession_start関数を呼び出さなければならない。onの場合はsession_startが呼ばれなくてもセッションが自動的に開始・継続される。

session.use_cookies

onの場合は、セッションIDの保存先としてクッキーを利用する。

session.use_only_cookies

onの場合は、セッションIDの保存先としてクッキーのみを利用する。
※session.use.only_cookieをonにすると、session.use_trans_sid の設定は意味がないので、session.use_trans_sid はoffにする。

session.use_trans_sid

onの場合、URL Rewriting機能が有効になり、URLのクエリとしてPHPSESSID=セッションIDが自動的に付与される。また、HTMLフォ ームの場合はhiddenによりセッションIDが自動的に渡される。offの場合、URL Rewriting機能が無効になり自動的にセッションID1が受け渡されることがなくなりコードで明示的に受け渡しを行う。
PHP 4.3.1 以下では、セキュリティーの問題があるためsession.use_trans_sid は有効にしない。

session.refere_check

リファラーが外部からの場合GETからのセッションの取得はおこなわない。

その他

session.cookie_lifetime
session.gc_maxlifetime
session.save_path

参考記事

PHPとWebアプリケーションのセキュリティーについてとても分かりやすく記載がされている。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。