入力-確認-登録の画面で、確認時に入力エラーがあり無条件に入力に戻す場合はどうするのが定石なんでしょうね。(1)入力画面にリダイレクトする、(2)確認画面のURLで入力画面を出してしまう、(3)URLは全部同じで画面を出し分ける…一長一短があることだとは思いますが
2011-09-18 10:21:59@ockeghem (1)かしら。何かあったときにWebサーバのログから流れを読みやすいw /WAFでホワイトリストや、画面遷移の限定(エントリページの指定)をするときに便利。(ぇw
2011-09-18 10:31:48@ockeghem あははw /“(1)と(2)の中間というか変形”のパターンだと、脆弱性があっても見つけられなくなる診断ツールがありそうですね。
2011-09-18 10:38:46@ockeghem 自分が設計するときは(3)が多いですね。確認画面とかウィザード形式の時もそうですが、途中をブックマークされることを考えるとURLは同じで画面だけ出し分けの方がやりやすい、と思ってます。
2011-09-18 11:12:05@ockeghem Railsでは、デフォルトで確認画面というのはないのですが、入力値にバリデーションエラーがあったらURLはそのまま(2)が普通です。理由はわかりませんが、HTTP的に考えるとエラーなのに3xxを返すのは変ということかもしれません(でもたぶん200返してる)
2011-09-18 11:19:28@ockeghem 個人的にはいつも3です。セッション変数で分けています。アンケートとか取ってみて欲しいですね(笑)
2011-09-18 11:39:12@ockeghem DrupalやRuby on Railsでは標準的なエラーチェック処理を書くと入力画面のサブミット時に確認し、入力エラーがあればエラー表示付きの入力画面に戻り無ければ次に進むという感じで、確認画面以降でのチェックは実装し難いため、その作法に従っています
2011-09-18 11:40:55@ockeghem その際、エラーチェックを通った入力データをサーバに保持していわゆるワンタイムトークンを発行、確認画面以降ではそのワンタイムトークンをやり取りするような実装にして、後からの変更やCSRFへの対策としています.
2011-09-18 11:41:30@ockeghem ユーザビリティ的な観点からの大前提として、確認時にエラーがあったら「空の入力画面」ではなく「各フィールドにユーザが入れた情報をセット済みの入力画面」を再表示すべきと思いますが、(1)だと (HTTPレベルのリダイレクトだと) それが実現困難なように思います。
2011-09-18 13:23:19@ockeghem セッション変数を使ったり、HTTPでのリダイレクトではなくJavaScriptで強制POSTさせれば可能かもしれませんが、その程度のことにセッション変数を使うのはばかばかしいし、JavaScript依存になってしまうのもアクセシビリティ的に少々よろしくない。
2011-09-18 13:23:27@ockeghem セッションを使う前提なら(1)で、POST遷移なら(3)で決まりですね。私はステートレスなPOST遷移の方が好きなのですが、戻るボタンが使いづらくなるのと、最近のフレームワークはURLベースでディスパッチするので作りづらいというのが辛いところです。
2011-09-18 16:19:09