1

ちょっと説明が難しい問題です。

シナリオを説明しましょう。

  1. ホームページ、登録ページ、ログインページ、ダッシュボードページがあります
  2. 登録ページからアプリケーションに登録し、送信をクリックすると。アプリケーションはリクエストを処理し、ユーザーがログインした状態でダッシュボードにリダイレクトします。今、問題が発生します。戻るボタンを押したとき。値が入力されたフィールドを含む登録ページが表示されます。これは起こらないはずです。
  3. システムにログインしてダッシュボードからブラウザに戻ると。ログインページが表示されます。これも起きてはなりません。

私が探しているものが明確になることを願っています。

私が試したいくつかの可能な解決策:

  1. プロキシ ページを使用します。多くのメール サービスが行っていることと同様です。しかし、MVC 3 では、ページ読み込みイベントが検出されず、ページの制御が非常に少なくなります。
  2. プロキシ ページで JavaScript 関数を使用する window.history.forward()
  3. レンダリングされたプロキシ ページを期限切れにします。

上記の解決策には完全に納得していません。これを体系的な方法で行うためのベストプラクティスと、問題に対するエレガントな解決策を得たいと思っていました。

私が使用している既存のソリューションに関する提案と、優れた実用的なソリューションがあるかどうかを教えてください。共有してください。

皆さんありがとう。

参考までに..開発にASP.NET MVC 4を使用しています。

4

2 に答える 2

0

登録およびログインページのコントローラー/アクションメソッドで、ユーザーがすでにログインしているかどうかを確認し、たとえば. ダッシュボード。

認証の方法によっては、このようなものです。

public ActionResult Register()
{
  //If already logged in no need to show register page again
  if(Request.IsAuthenticated)
    return Redirec("Dashboard");

  return View();
}

編集:コメントされた問題を修正するために回答を更新

次の内容で部分ビューを作成しました

<input type="hidden" id="reloader" value="" />
<script type="text/javascript">
  if (document.getElementById("reloader").value === "reload")
      window.location.reload();
  else
      document.getElementById("reloader").value = "reload"
</script>

@Html.Partial('PartailViewName')その後、Register ビューと Login ビューにそれを含めることができます。

戻るボタンを使用するとDOMがキャッシュされるため、ユーザーが戻るボタンを使用すると、上記のスクリプトはページをリロードします。

最初の回答と一緒に使用すると、必要な動作が得られます。

于 2012-10-14T07:25:50.690 に答える
0

history.js を使用して history.back() イベントを制御します。最後のページの状態を、ダッシュボードまたは必要なページを指すように置き換えるだけです (Web アプリ内。セキュリティ上の理由からドメイン間は禁止されています)。ユーザーが戻るボタンをクリックすると、ログイン ページの代わりに定義済みのページが読み込まれます。

https://github.com/browserstate/History.js/

プロキシ ソリューションは、この種の UI 操作には複雑すぎます。クライアント側コントロールは、ソリューションに最適なアプローチです。HTML5 リファレンスでは、そのための History API が定義されています ( http://www.w3.org/TR/html5/history.html )。残念ながら、現在すべてのブラウザーがそれを実装しているわけではありません。これは、history.js スクリプトが存在するためです。

于 2012-10-14T06:52:54.920 に答える