セッションとは?
セッション(session)と聞いて、あなたは何を思い浮かべるでしょうか。おそらく、ディスカッションを行うトークセッションや、ミュージシャンのジャムセッションなどが連想されるのではないかと思います。英和辞書を引くと、会議の開会・裁判の開廷といった意味があることもわかります。
これらに対して、すべて同じsessionという単語が使われているということは、いずれにも共通していることがあるはずです。それは何でしょうか。
答えは、「同じ場に複数のメンバーが同時に会している」ということです。トークセッションでは、意見を述べる人と聞く人とがいなくてはなりません。ジャムセッションでは、同じステージ上で同時に演奏していなければ、ミュージシャン同士のやりとりを楽しめません。開会・開廷も同じ場に会していなければ、段取りや手続きを進めることができません。
sessionという単語は、もともと「座る」という意味を持つ単語から生まれたもので、「一同で席に着く」というところから、上記のものへとその意味合いも派生していったのです。
PHPプログラムにおけるセッション
そこで、PHPプログラムにおけるセッションとは何かということですが、これは「WebサーバとWebブラウザとをつながっている状態」を意味します。「つながっている」とは、電話と同じで、相手と会話できていることをいいます。WebブラウザからのアクセスによりWebサーバからコンテンツが送信されることを、この会話に例えているわけです。
電話での会話は、地理的に相手との距離が離れていても、実質的に同じ場を共有しているといえますが、WebブラウザとWebサーバによる通信も同じ場を共有していると考えてよいでしょう。
PHPでセッションが繋がっているかどうかを確認する方法として、前回紹介したクッキーが主に用いられます(図1)。Webブラウザがクッキーをサポートしていなければ、URLにセッションIDが含まれることになります。セキュリティの面からは、クッキーによる方法が良いとされています※1。本稿でもこちらを説明していきます。
セッションの開始
つながっている状態にすることを、セッションを開始するといいます。PHPプログラムでは、session_start()を実行します。セッションを継続しておく場合にも、これを実行しなくてはなりません。
セッションはクッキーを利用して実現していますので、必ずリスト1のようにHTMLよりも先に記述してください。
リスト2に、セッションを開始するときに設定されるセッションIDを画面に表示する例を示します※2。実行結果は図2です。セッションIDはsession_id()という関数で知ることができます。
セッションの切り替え
session_regenerate_id()関数によってセッションIDを変更すると、新しいセッションに切り替えられます。リスト3は、リスト2にIDを変更するためのボタンを追加したものです。実行結果を図3に示します。
セッションの終了
つながっている状態をやめることを、セッションを終了するといいます。これには、設定によっていくつかの方法に分かれています。
Webブラウザを閉じたとき
デフォルトの設定でセッションを開始したときは、Webブラウザを閉じるまで同じセッション(ID)が有効です。ちょっと面倒ですが、リスト2を実行した後にWebブラウザを閉じ、もう一度開きなおして再度リスト2を実行すると、前回とは異なるIDが表示されるはずです。
設定した有効期限を過ぎたとき
セッションを開始する前に、あらかじめ有効期限を設定しておくと、それを過ぎてからアクセスがあっても、自動的にセッションが終了したと判断し、新たなセッションIDが設定されます。
セッションに有効期限を設定するのはsession_set_cookie_params()関数です。これを実行してからの秒数単位で指定しますので、、1時間有効にするなら60×60(=3600)秒間となります。この関数はsession_start()よりも前に実行しておかなくてはなりません。
強制的に終了するとき
PHPプログラムでセッションIDを削除すると、強制的にセッションが終了されます。終了する前に、必ずそれまで使用していたデータを削除しておくようにしましょう。
変数の利用
セッションでは、$_SESSION[名前]という変数を利用することができます。この変数は、同じ名前でもセッションごとに値が異なります。ですから、ユーザのアクセスに応じて処理を変えることもできます。変数を削除するときはunset( $_SESSION[名前] )とします。なお、$_SESSIONに関係する変数などの情報はクッキーではないため、特にプログラミングしない限りWebブラウザに送信されることはありません。これらの情報はサーバ内に保存されます。
リスト6は「増やす」「減らす」をクリックすると、カウンタの値が増減するPHPプログラムです。図4のように複数のWebブラウザを開いてみると、カウンタの値をそれぞれ独立して増減させることができます。
上記の3つのリストを実行する前に、まずキャッシュのデータやクッキーをいったん削除しましょう。それからWebブラウザを再起動しないと、修正の結果がうまく反映されないことがあります。こうしたことにも注意して、PHPプログラムの開発を進めていってください。