セッション設定に気をつけて

第4回 Piece Framework 勉強会で、何故か "The flow name [ WizardForm ] not found in the flow definitions." と、フロー定義がねー YO! と怒られて先に進めなかった問題ですが、解決しました。
どうやらセッション関連の設定がまずかったようです。
エントリポイントにて下記のようにセッションデータ保存ディレクトリとセッション名をちゃんと設定してやれば OK でした。

session_save_path("$base/sessions");
session_name($flowName);

全体はこんな感じ。


勉強会に持っていった PowerBook には Apache 1.3.x と Lighttpd 1.4.x がインストールしてあり、勉強会ではバーチャルホストの設定が楽な Lighttpd を使っていました。
そこで ApacheLighttpd、双方の PHP で同じ session.save_path (/tmp)session.name (PHPSESSID) になっていたのが悪かったのかなと。
php.ini をデフォルトのまま弄ってなければ問題ありませんが、session.cache_limiter (nocache) 等、他のセッション周りの設定にも気をつけた方が良さそうです。


Piece Framework ではフロー変数のコンテナとしてセッション変数を使っており、PHP ではセッション機能を使うとき自動でコンテンツをキャッシュしないように HTTP ヘッダを出力してくれます。*1
これにより、ブラウザの「戻る」ボタンで前の画面が表示されることを抑制でき、好ましくないページ遷移を予防できるのですが、Safari は HTTP ヘッダを無視してコンテンツをキャッシュすることがあるため、ブラウザの「戻る」ボタンで前の状態を表示できてしまいます。(そのままリロードすると現在の状態が表示されます)
見かけ上の「速さ」を演出するためとはいえ、こういう行儀の悪い挙動は止めてほしいですね。*2


それに関連した注意をひとつ。Piece Framework を使ったアプリケーション開発では、全てのページ遷移はフロー定義に基づいて行われるので、ユーザに入力内容を修正させたいときは「ブラウザの「戻る」ボタンを押してください」というのは通用しません。フロー定義ファイルで双方向の遷移を定義しておき、ビューにもそのためのリンクまたはボタン等を埋め込んでおく必要があります。

*1:デフォルト設定では

*2:Opera のキャッシュもそのような傾向があったかもしれません