第八週 †セッションについて扱います。 HTTP †HTTPは、ブラウザとウェブサーバがテキストデータを交換するときに使用されるプロトコルです。 HTTPによるテキストデータの交換は、ブラウザの「リクエスト」とウェブサーバの「レスポンス」から成ります。 FirefoxでHTTPリクエストを確認する †FirefoxでHTTPリクエストを確認できるアドオンとして「Live HTTP headers」があります。 この状態で http://y-mahata.s-tanno.com/ を開いてください。 ユーザエージェントや接続先のパス、コンテンツの種類などがテキスト形式で交換されていることを確認してください。 コマンドラインからHTTPリクエストを発行する †PuTTyでs-tanno.comにログインし、次のようなコマンドを打ってみましょう。 $ telnet s-tanno.com 80 GET / HTTP/1.1 Host: s-tanno.com [下記はレスポンス] HTTP/1.1 200 OK Date: Wed, 06 May 2009 00:07:09 GMT Server: Apache/2.2.3 (CentOS) ...(略)... この例では、次のようなリクエストをs-tanno.comに発行しています。
LiveHTTPHeadersで確認したものよりもリクエストの項目が著しく少ないことに注意してください。 HTTPリクエストの「必須項目」はとても少ないので、このようなデータ量の少ないリクエストでもきちんと通信を行うことができます。 Internet ExplorerやFirefoxのようなウェブブラウザでインターネット上のウェブページを閲覧する時には、 セッション †セッションとは、HTTPで継続した通信を行うために必要な仕組みのことであり、通常はクッキーを用いて実現されます。 セッションのサンプル †セッションを理解するために、次のページを開いてみてください。 http://y-mahata.s-tanno.com/sample/session.php 開いた後に、何度かページをリロードしてください。
PHPでは「セッション」という機能を使うことで、これらの要件を満たすことができます。 先ほど例として挙げたURL(http://y-mahata.s-tanno.com/sample/session.php)の中身は次のようになっています。
「session_start()」という関数の役割は「ブラウザを特定し、そのブラウザ専用のセッション変数($_SESSION)を復元」することです。 一旦、ブラウザのクッキーを削除しましょう。 GET /sample/session.php HTTP/1.1 Host: y-mahata.s-tanno.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cache-Control: max-age=0 ブラウザの設定によって、細部のパラメータが異なるかもしれません。 GET /sample/session.php HTTP/1.1 Host: y-mahata.s-tanno.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 GTB5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: PHPSESSID=94ce0af42ee7457653a5f428badc2886 Cache-Control: max-age=0 注目すべきポイントはリロードした方のリクエストに「Cookie: PHPSESSID=94ce0af42ee7457653a5f428badc2886」という行が追加されているところです。 セッションの仕組みを使い、「ログイン機能」や「多重ポストの回避」などを実現することができます。 宿題 †「簡易ログイン機能」を実装してください。簡易ログイン機能は次のページを含みます。
各ページで機能が重複しても構いません*1。
簡易ログイン機能のためのページは、http://y-mahata.s-tanno.com/8th_week_homework.html で参照できる場所に置いてください。 参考資料 † |