0

私は正しい方向に少しポイントを探しています...

MVCサイトがあり、すべてが同じコードを指すさまざまな仮想ディレクトリがあります。

https://www.x.com/dir1
https://www.x.com/dir2

さまざまな仮想ディレクトリは、一部はURL'content'によるビジネス上の理由で使用され、一部はサイトのスキン方法を制御するために使用されます。

フォーム認証を使用してアクセスできるようにサイトがロックされています。少しわかりにくい問題を追跡しようとしています。

ユーザーはURL「dir1」を使用してサイトにログインし、正常に認証され、SetAuthCookieが呼び出されます。

サイト全体でOnActionExecutingで実行されるコードがあります-ログインしたユーザーを取得し、アクセスする仮想ディレクトリを決定し(ユーザーごとに1つ)、間違ったURLにある場合は、リダイレクトします(簡略化されたコード)。

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (Authenticated && UserIsNotInCorrectDirectory())
    {
        filterContext.Result = new RedirectResult("https://www.x.com/dir2");
    }
}

私が抱えている問題はこれです-新しいブラウザを起動し(Firefoxを使用して、Cookieを表示する)、次のようにします。

  1. 'dir1'URLを使用してサイトにログインします。
  2. 正常に認証されました-認証Cookieを含むset-cookiehttpヘッダーが表示されます。この応答はまた、私を「dir2」にリダイレクトします。
  3. 次のページでCookieを表示すると、認証Cookieがありません。これが問題です。

さらに混乱を招くために、ログインページを再度表示して(同じブラウザ、セッションが閉じられていない)、これを再試行すると、機能します。誰かが手がかりを得ましたか?

4

1 に答える 1

0

OnActionExecutingの考えでは、結果を上書きすると、フィルターがログインフォームの邪魔になり、セッションCookieが失われます。Loginこのコードが属性にある場合は、アクションから属性を削除して、それが機能するかどうかを確認します。

于 2013-02-28T10:07:47.217 に答える