第7章 ステート
教科書「プログラミングPHP 第2版」
上級試験は、オライリーから出版されているプログラミングPHP 第2版を教科書に出題されます。
ヘッダー
- header関数が用意されている
- headerやsetcookieは<html>タグ出力より前に実行する
- コンテンツタイプ。通常はtext/htmlが用いられる。text/plainを用いると、ブラウザはテキストとして解釈する。
- リダイレクトするときはheader('Location:移動先')
- 有効期限を設定(プロキシやブラウザキャッシュ用)。キャッシュされたくない場合は、現在または過去の日時を指定する。
- ブラウザがユーザー名とパスワードを送信することで認証する。認証レスポンスは401 Unauthorized
- ブラウザからの送信データ(ユーザー名とパスワード)をPHP_AUTH_USER、PHP_AUTH_PWで取得する。
CGI版では不可。Apacheモジュール版は可。
ステート
- HTTPはステートレス。同一クライアントからの一連のリクエストを認識する仕組みが無い。
- ショッピングカート等では、同一クライアントかどうかの判別が必要。
- 隠しフィールド、URLリライト、クッキー、セッション等を使う。
クッキー
- setcookieでクッキー名、値、有効期限、パス、ドメイン、SSL限定か?を設定する
名、一意の名前。空白やセミコロンは不可。
値、任意の文字列。値のサイズに直接の制限は無いが、クッキーの最大サイズは4KB
有効期限、設定しないとブラウザを閉じるまで。
パス、ブラウザがクッキーを送信するURLパス範囲を限定する。
ドメイン、ブラウザがクッキーを送信するドメインを限定する。
セキュア、SSL(https)の時に限ってクッキーを送信するか?を指定する。 - クッキーのデータは連想配列$_COOKIE
- クッキーの最大サイズは4KB、1ドメインにつき20個、クライアント側で300個まで
- 有効期限はクライアントの時刻で判定される(正確とは限らない)
セッション
- 最初の訪問時に、一意のセッションIDを発行
- デフォルトではPHPSESSID
- クッキーに保存(ブラウザ設定でクッキーオフの場合はURLに付加)
- セッションに紐付けられたデータを利用して、ショッピングカート等を作る
- session_startで開始
- $_SESSION[]配列に格納する
- session_unregisterで不要な変数を取り除く
- session_destroyでセッションを破棄する
- php.iniのsession.cookie_lifetimeで有効期間を指定する
- デフォルトでは、PHPSESSIDクッキー。隠しフィールドでの送信、URLに付加、という方法もある。
- URLに付加するには、PHPコンパイル時に、-enable-trans-idオプションをつける。ただしパフォーマンスは下がる。
カスタマイズした使い方
- セッション情報はデフォルトでは、サーバーの一時ディレクトリに保存される。
- php.iniのsession.save_pathで保存先を指定できる。
- phpフォーマットか、wddxフォーマットか選択できる。php.iniのsession.serialize_handlerで設定する。
- session.save_handlerをuserにし、session_set_save_handlerで関数を登録する
- オープンハンドラ、クローズハンドラ、リードハンドラ、ライトハンドラ、デストロイハンドラ、ガベージコレクションハンドラ
- httpd.confを書き換える(Kindle2ではLocations 6598)
- session_set_save_handlerはセッション開始前に呼び出す
SSL
- PHPは直接SSLに関与しない
- $_SERVER['HTTPS']がonかどうかで区別する
- フォームの送信先もSSLか確認する
※原書を元にしています。日本語訳本とは用語等が異なる可能性があります。
Copyright (C) 2003-2018. PHP で WEB 作成 All rights reserved.