1

次のシナリオがあります。

  • ほとんどすべてのコントローラーが保護されている ASP.NET MVC Web サイト/Web アプリケーションがあります。[AuthorizeAttribute]
  • ログインしているユーザーと匿名ユーザーの両方が利用できる新しいページ (1 つの新しいコントローラー + いくつかのアクション) を導入しました (私はそれらを「公開」 URL と呼びます)。匿名ユーザーの場合、重要なデータをそこに保存するためにセッションも使用しています (たとえば、匿名ユーザーを ID で識別するなど)。LayoutViewこれらの ' public ' アクションの設定は、現在のユーザーが認証されている (ログインしている) かどうかに関係なく設定されます。それらが認証されると、(「 publicchildView 」アクションによって表示される) 全体が、ログイン ユーザーなどのメニューを表示するマスター レイアウト ページに埋め込まれます。匿名ユーザーにはメニューがなく、純粋なページだけです。childview

私の問題:

  • ログインしたユーザーがタイムアウトし、前述の公開URL にアクセスしようとすると、ページはそのユーザーを notloggedin-user (匿名ユーザー) として処理するため、新しい URL にアクセスする前に、ログが表示されます。 -インターフェイスで、クリックすると匿名のインターフェイスが表示され、彼女を怖がらせる可能性があります! 彼女がアクセスしている URL はログインしていないユーザーにも有効であるため、彼女を /Account/Logon/RedirectUrI=whatever にリダイレクトすることはできません。

私が考えることができる唯一の解決策は、現在のものと同じ BLL ロジックを呼び出す別のコントローラー/アクションを導入する[AuthorizedAttribute]ことです。しかし、これは避けたいと思います。

  • それは少しのコードの重複です
  • 公開ページの URL は、ログイン ユーザーと匿名ユーザーで異なります。ログイン ユーザーが好きな場所に URL をコピー アンド ペーストして、その URL は引き続き匿名ユーザーを処理できます。
4

1 に答える 1

2

1 つの Url を保持する場合は、匿名ユーザーと認証済みユーザーに同じコントローラー/アクションを使用する必要があります。

問題は、セッションがタイムアウトすると、認証されたユーザーが匿名ユーザーになり、新しい (匿名) セッションを生成することです。

真の匿名ユーザーと、認証されているが現在は匿名ユーザーを区別するためにできることは、アプリに 1 回ログインしたすべてのユーザーに特別な Cookie を送信することです。

このような認証されたユーザーセッションがタイムアウトすると、ブラウザーは Cookie をサーバーに送信し、ログインページにリダイレクトできます。

実際の匿名ユーザーのブラウザーはその Cookie を送信しないため、ページを表示するだけで済みます。

于 2013-01-11T11:51:57.563 に答える