この章ではセッションについて説明します。
連続するアクセスを通じて特定のデータを保持する機能を持っているのがセッションです。
クッキーの箇所で説明した通り、通信というのはページを移動するたびに1回接続を切断してから、また接続し直すという行為を繰り返すので、ページ間でデータの引継ぎはできません。そこでセッションを使うと前のページの情報を引き継ぐことができるので、同じユーザーが接続していると認識することが出来ます。
以下の図で詳しく説明します。
そして、そのIDに関連したデータを
そしてデータはサーバで管理されて、セッションIDのみをユーザーに送り、そのIDはクッキーとしてファイルに保存されます。
次にユーザーはセッションIDをサーバに送って、そのIDに関連するデータをサーバから収得することが出来ます。
この仕組みにより複数のページ間で情報の共有をすることが出来ます。
具体的にWebのショッピングサイトを例にすると、ユーザーは商品の選択、他の商品を検索、選択した商品の取り消しなど、サイト内のページをいろいろ移動したあと、精算画面に移ります。
このときに、どの商品を選択したかの情報をどこかに蓄積してしないと、レジで金額計算ができなくなってしまいます。
そこで、選択された商品などをセッション情報としてセットして、ユーザーがサイトに滞在している間は保持しておくような仕組みがセッションです。
では例を元にセッションについて説明します。
次のファイル名はLesson33.phpです。
次のファイル名はLesson34.phpです。
Lesson33.phpとLesson34.phpとLesson35.phpの先頭にsession_start();を書いてください。
Lesson33.phpにアクセスしますと以下の登録フォームが現れます。
ユーザーを識別するために、サーバ側が決めた番号をセッションIDといいます。セッションIDを取得するにはsession_id関数を使用します。
その下の「セッション名」は、セッションIDを受け渡すために使われます。
例えば
セッション名を取得するにはsession_name関数を使用します。
その下の
セッションファイルの保管場所を取得するにはsession_save_path関数
を使用します。
セッションID、セッション名、セッションファイルの保管場所はこれらの意味を説明するために表示させましたが、あえて表示させる必要はありません。
次に参加者登録に「近藤」と入力し、「登録する」をクリックしますとLesson34.phpに移りますが、「近藤」というデータは
そして、
これは連想配列の形式で値を保持する変数です。
$_SESSIONを使用することで複数のページ間でデータを共有することができます。
結果は以下のように近藤が登録されました。
つまり、データが受け継がれている事を意味します。
次に上の画面のbackをクリックしてください。
クリックしますと以下のLesson33.phpのフォームに戻りますので今度は島田と入力して「登録する」をクリックしてください。
そして、
ここでの注目点は
つまり近藤と島田をつなげているわけです。
セッション情報は用事が終えたら、セキュリティの観点から削除することが必要です。
Lesson34.phpの中の
クリックしますとLesson35.phpにジャンプするのですが、次の3か所の記述がセッション情報のすべてを削除するプログラムです。
セッション変数は連想配列なので
つまり
実はセッションIDをブラウザに記録する仕組みはクッキーを使用していますので、クッキーのデータを消す方法と同じ手法で消します。
session_name関数はセッション名を取得する関数ですので、これを$_COOKIEのキーにして、セッションIDが存在していれば削除します。
setcookieのクッキー名は
セッション変数のデータを破棄、ブラウザに記録されているセッションIDの破棄、サーバに記録されているセッションIDの破棄がセットになって初めて完全にセッション情報を削除することが出来るわけです。