プログラミング入門

セッションについて知ろう

この章ではセッションについて説明します。
連続するアクセスを通じて特定のデータを保持する機能を持っているのがセッションです。
クッキーの箇所で説明した通り、通信というのはページを移動するたびに1回接続を切断してから、また接続し直すという行為を繰り返すので、ページ間でデータの引継ぎはできません。そこでセッションを使うと前のページの情報を引き継ぐことができるので、同じユーザーが接続していると認識することが出来ます。
以下の図で詳しく説明します。 セッションの仕組みは初めてアクセスしたユーザーに対して、サーバの中でユーザーにを発行します。
そして、そのIDに関連したデータを(後ほど説明します)に格納します。
そしてデータはサーバで管理されて、セッションIDのみをユーザーに送り、そのIDはクッキーとしてファイルに保存されます。

次にユーザーはセッションIDをサーバに送って、そのIDに関連するデータをサーバから収得することが出来ます。
この仕組みにより複数のページ間で情報の共有をすることが出来ます。
具体的にWebのショッピングサイトを例にすると、ユーザーは商品の選択、他の商品を検索、選択した商品の取り消しなど、サイト内のページをいろいろ移動したあと、精算画面に移ります。
このときに、どの商品を選択したかの情報をどこかに蓄積してしないと、レジで金額計算ができなくなってしまいます。
そこで、選択された商品などをセッション情報としてセットして、ユーザーがサイトに滞在している間は保持しておくような仕組みがセッションです。
では例を元にセッションについて説明します。
次のファイル名はLesson33.phpです。
次のファイル名はLesson34.phpです。 下のファイル名はLesson35.phpです。 セッションを使用するファイルにはをプログラムの先頭に配置します。つまり、
Lesson33.phpとLesson34.phpとLesson35.phpの先頭にsession_start();を書いてください。

Lesson33.phpにアクセスしますと以下の登録フォームが現れます。 以下の一番上のアルファベットと数字の組み合わせがセッションIDです。
ユーザーを識別するために、サーバ側が決めた番号をセッションIDといいます。セッションIDを取得するにはsession_id関数を使用します。
その下の「セッション名」は、セッションIDを受け渡すために使われます。
例えばのようにというセットでユーザーとサーバ間を行き来します。
セッション名を取得するにはsession_name関数を使用します。
その下のはセッションファイルの保管場所を意味しています。
セッションファイルの保管場所を取得するにはsession_save_path関数
を使用します。

セッションID、セッション名、セッションファイルの保管場所はこれらの意味を説明するために表示させましたが、あえて表示させる必要はありません。
次に参加者登録に「近藤」と入力し、「登録する」をクリックしますとLesson34.phpに移りますが、「近藤」というデータはに入ります。
そして、$_SESSIONに代入するのですが、
これは連想配列の形式で値を保持する変数です。


$_SESSIONを使用することで複数のページ間でデータを共有することができます。 例ではセッション名をpersonsnameにしたのでを代入しています。
のようにセッション変数の先頭にが付いていますが、これはに何もデータが入っていない状態でこの変数を使用すると警告が出るので、これを出ないようにするためにをセッション変数の先頭に入れています。
結果は以下のように近藤が登録されました。 Lesson33.phpとLesson34.phpのセッションIDが同じですが、これはページが遷移しても同じユーザーであることを意味します。
つまり、データが受け継がれている事を意味します。
次に上の画面のbackをクリックしてください。
クリックしますと以下のLesson33.phpのフォームに戻りますので今度は島田と入力して「登録する」をクリックしてください。 「登録する」をクリックした結果、Lesson34.phpにジャンプしますが、島田というデータはに入ります。
そして、に代入します。
ここでの注目点はの右横に文字列連結演算子がありますが、これで文字列同士を連結しています。
つまり近藤と島田をつなげているわけです。 次にログアウトする時に、セッションの情報を削除する方法について説明します。
セッション情報は用事が終えたら、セキュリティの観点から削除することが必要です。
Lesson34.phpの中のをクリックしてください。
クリックしますとLesson35.phpにジャンプするのですが、次の3か所の記述がセッション情報のすべてを削除するプログラムです。 セッション変数のデータの破棄を行っています。
セッション変数は連想配列なのでという何も入っていない配列を代入することで$_SESSIONは初期化されます。
つまりの中の近藤、島田というデータは破棄されることになります。 ブラウザに記録されているセッションIDの破棄を行います。
実はセッションIDをブラウザに記録する仕組みはクッキーを使用していますので、クッキーのデータを消す方法と同じ手法で消します。
session_name関数はセッション名を取得する関数ですので、これを$_COOKIEのキーにして、セッションIDが存在していれば削除します。
setcookieのクッキー名はにします。
サーバに記録されているセッションIDの破棄を行います。
セッション変数のデータを破棄、ブラウザに記録されているセッションIDの破棄、サーバに記録されているセッションIDの破棄がセットになって初めて完全にセッション情報を削除することが出来るわけです。