第8回 セッションの仕組みを知ろう - PHP基礎講座

PHP基礎編

Saity先生のPHP基礎講座

Lecutures on PHP

第8回 セッションの仕組みを知ろう (その2)

 このエントリーをはてなブックマークに追加

もう少しセッションの詳しい話

  • セッションの仕組みで難しいのは、サーバーからデータを復元する時、どのユーザーのセッションデータかを判別することなんだ。
  • ん?どういうことですか??
  • たとえば2人が先ほどのスクリプトを同時にアクセスしたとする。もし2人を区別できなかったら、$_SESSION変数が共通になってしまって、挙動がおかしくなってしまうよね?
  • なるほど、確かにユーザーを区別する必要があるわけね。それって難しいことなの?
  • 本来Webにはそういった機能が用意されていなかったんだ。そこで、Netscape社がCookieという技術を開発した、という訳だ。
  • さっきも出てきましたけど、Cookieってどんなものなんですか?
  • Cookieは、ユーザーのブラウザ内に情報を記録しておく技術のことなんだ。セッション機能に使われるだけじゃなく、「持続ログイン機能」を実装するためにも使われる。よく、「ログイン名とパスワードを覚えておく」機能がついたサイトを見かけることがあるでしょう?
  • うん。mixiとかそうよね。

mixiのログイン画面

  • これは、ブラウザを閉じた後にもCookieをブラウザ内に残すようにしているんだ。Cookieには有効期限という概念があって、特に指定しない場合はブラウザが閉じられるまでなんだけど、任意の有効期限を設定することもできるんだ。
  • なるほどー。それをある程度長くすれば、その「持続ログイン機能」が実現できるわけですね。
  • では具体的に、どうやってユーザーを区別しているのかを知っておこう。先に結論から言うと、セッションIDという、セッションごとに固有の文字列を与えて、それを使って判断しているんだ。セッションIDは通常、Cookieの中に保存されるようになっていて、ブラウザがセッションIDをPHPに伝えることで、サーバー内に保存されたどのデータを復元したらいいのかが分かる仕組みなんだ。
  • そういえばsession_idという関数もあったわ。
  • うん、それはセッションIDを明示的に指定する関数だね。もちろん、session_start関数よりも前に呼び出す必要がある。
  • そうしないとサーバーは、そのセッションIDに対応するデータを読み出す機会がないものね。
  • 基本的にはセッションIDをサーバーに伝えるための仕組みとしてCookieが使われるんだけど、ブラウザの設定によってはCookieを無効にすることもできてしまう。そこでPHPではCookieの他にGETを使ったセッションIDの引き渡しもできるようになっているよ。
  • ほうほう・・・。具体的にセッションIDってどんなん何ですか?
  • セッションIDの正体は、サーバーがランダムに作成する文字列だ。たとえば「3f17b855b4bf21022d150f407eb4415d」というように、決して他のIDと重複しないものになっているよ。また、GETで渡す場合も、Cookieで渡す場合も、セッションIDを渡す際の変数名が必要になる。その変数名をセッション名と呼んでいて、session_name関数でセットできるんだ。
  • ふむふむ。マニュアルによると、セッション名は、デフォルトでPHPSESSIDになっているんですね。
  • そう。だからGETで渡す場合は、http://サーバー名/スクリプト名?PHPSESSID=********となるわけだ。この場合は、すべてのリンクにセッション名とセッションIDを入れないと、セッションを継続できないから注意が必要だよ。セッションIDがないと、セッションが開始できないからね。
  • は~い。
  • なんだか、今回は理屈の話ばかりになってしまったね。今回のテーマだった「セッション」は、PHPを扱う上で肝になる物の一つだから、結構じっくり説明したよ。
  • う~ん、頭がきゅーきゅーいってます。。。
  • いやぁ。ユキちゃんはだいぶがんばっているみたいで、感心感心。それじゃあ次回はソースコードに戻って、占いプログラムの説明を続けていこう。
  • よしっ、次回もがんばるぞっ!
  • 1
  • 2
  • Saity先生

本名:海原才人 アシアル株式会社所属

PHPスクール講師。同時に、現役システムエンジニアとしてシステム開発も行っている。

携帯電話でWebサイトが見られるようになった事をきっかけに、Webの普及の早さに驚愕し、Webプログラミングに興味をもつ。 その後、PHPによるWebプログラミングと出会い、その習得のしやすさと多機能さに魅了され、数多くのシステム開発をPHPでこなしてきた。 現在は、PHPの魅力とシステム開発で蓄積したノウハウをPHPスクールで多くの人に伝える事に熱意を燃やしている。

「教育において、教わる側が解からない事に罪はなく、教える側が興味を持たせられない事が罪だ」というのが講師としての信念。 生徒にPHPの面白さ・素晴らしさを伝えるため、魅力的な講義を展開する事に全力を注ぐ。

ご意見・感想フォーム

今回の「Saity先生のPHP基礎講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:

  



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)