構築したCMSをリファクタリングしています。CMSには、選択したロケールに基づいてページを編集する機能があります。CMSのユーザーが編集したいページを閲覧している間、この選択したロケールをセッションに保持します。
さて、私の質問は次
のとおりです。ユーザーがページを編集していて変更を送信したい場合、送信するフォームに非表示フィールドとしてロケールを含める必要があると思いますか?安全のためだけに?または、セッションに存在するロケールだけに依存する必要がありますか?
構築したCMSをリファクタリングしています。CMSには、選択したロケールに基づいてページを編集する機能があります。CMSのユーザーが編集したいページを閲覧している間、この選択したロケールをセッションに保持します。
さて、私の質問は次
のとおりです。ユーザーがページを編集していて変更を送信したい場合、送信するフォームに非表示フィールドとしてロケールを含める必要があると思いますか?安全のためだけに?または、セッションに存在するロケールだけに依存する必要がありますか?
はい、ユーザーがページの編集中にロケールを変更した可能性があるため、毎回絶対に投稿する必要があります。その結果、ページが別のロケールのコンテンツで上書きされます。
ユーザーがロケール外のページを編集することを許可されていない場合は、ユーザーが指定されたページとロケールの組み合わせを編集できるかどうかをさらに確認する必要があります(セッション中に偽造される可能性があるため)。
戻るボタンの動作をどのようにするかによって異なります。
ユーザーが数ページにアクセスし、別のロケールを選択してからヒットバックした場合、ロケールの変更を戻るボタンで元に戻したいですか?
(ブックマークページ(お気に入り)にロケールを記憶させたい場合は、通常はクエリ文字列としてURLに保存する必要があります。)
Pekkaが提案するように、ユーザーがロケールを切り替えることを期待しない場合は、リクエストからロケールを決定できます。ブラウザは、リクエストごとにその情報を送信します。
リクエストの値をセッションの値と比較し、変更を監視します。変更を処理するために使用するロジックは、ユーザー次第で柔軟です。
選択した言語についてはわかりませんが、ASP.NETでは、HttpRequest.UserLanguagesプロパティから言語を取得できます。