質問: phpにて顧客情報を扱うシステムを作成しています。 画面構成及び顧客データは下記のとおりです。 **□画面** ・顧客データ一覧画面 ・新規登録画面[編集入力画面と併用] ↓ ・新規登録確認画面[編集確認画面と併用] ↓ ・新規登録完了画面[編集完了画面と併用] **□DB** 顧客データ(csv, MySQL等) 顧客情報の登録及び編集にあたって、画面遷移の際のデータ保持にセッションを使用しているのですが、セッションに格納したデータの扱いについてどう処理してよいか悩んでいます。 下記、新規登録の場合及び編集の場合の流れです。 **□新規登録の場合** 1.「新規登録画面」にて入力→入力データは「確認画面」に遷移時にセッションに格納。 2.入力内容にエラーがあれば「新規登録画面」に遷移→セッションに格納した値表示→既存のセッションを削除。 3.再度「新規登録画面」にて入力されたデータをセッションに格納→問題なければ「確認画面」に遷移、セッションに格納されたデータを表示。 4.「確認画面」で「登録」ボタンを押す→セッションに格納されているデータを「顧客データ」に登録→「完了画面」に遷移 **□編集の場合** 1.「データ一覧画面」からidをパラメータで渡す。 2.「編集入力画面」で$_GET["id"]でidを取得、顧客データ内を検索しデータを取得 →取得したデータをセッションに格納し、既存の登録データを表示。 **・起きてしまう問題点** 1)編集の場合、「編集入力画面」から他のページに遷移した際、又はブラウザを閉じた場合でも、 上記でセッションに格納したデータが保存されたままになってしまう。 また「新規入力画面」を開いても、上記で編集しようとしていたデータがフォーム内に表示 されてしまう。 どのようにセッションを削除したらよいのか、それともそもそもセッションを使用せずに考えた方が よいのか考え方を教えていただけますと幸いです。
回答: 各アクションの画面で、セッションに保存してあるデータを鵜呑みにして利用してしまうと、 そういう動作になってしまうのではないでしょうか。 どういう画面遷移をしてきたらセッション上のデータを使うか、 あるいは無視して空欄にする、あるいはデータベースから読み込む、 というのを状態遷移図などを起こして仕様化したほうが良いのではないかと。 ページ離脱直前にセッションをクリアするようなjsを仕込むことも 検討すると良いかもしれません。