カテゴリー
PHP

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

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

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

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

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


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