4

ASP.NET 4.0 アプリケーションのフォーム認証は、cookieless="AutoDetect" に設定されています。ユーザーがログイン ページをブックマークすると、ブックマーク リンクがhttps://hostname.com/Login.aspx?AspxAutoDetectCookieSupport=1に設定されることに気付きました。ユーザーが新しいブラウザ セッションから直接これに移動し、有効なログインを実行した場合、Cookie は設定されません。そのページに直接移動し、クエリ文字列から AspxAutoDetectCookieSupport を削除すると、Cookie が正しく作成されます。

ユーザーが Default.aspx またはルート ディレクトリに直接移動すると、クエリ文字列に AspxAutoDetectCookieSupport=1 が付加されていても、ログインは正しく機能します。

ユーザーがログイン ボタンをクリックすると、ログイン ページにポストバックし、ユーザーの資格情報をデータベースと照合して手動でチェックします。成功した場合、次のことを行います。

FormsAuthentication.RedirectFromLoginPage(userName, false);

リファレンス ソースの ASP.NET フォーム認証コードを調べるなど、これをデバッグするのに何時間も費やしましたが、何が原因なのか特定できませんでした。現時点で唯一の解決策は、ブックマーク URL からログイン ページを削除するようユーザーに指示し、ユーザーがクリックできるようにログイン ページにブックマーク ボタンを追加することです。

このフォーム認証の問題を解決する別の解決策はありますか? それはフォーム認証ではありますか?

4

1 に答える 1

1

ここでの問題は、リダイレクトの場所が提供されているかどうかに関係なく、常に RedirectFromLoginPage を使用していることです。指定しない場合、リダイレクトは失敗します。これに対する適切な解決策は、リダイレクト URL を確認し、利用できない場合は default.aspx にリダイレクトすることです (このブログ記事から借用したソースの例)。

// Once the user's entered credentials are verified //
if(Request.Params["ReturnUrl"] != null)
{
    FormsAuthentication.RedirectFromLoginPage(txtUserName.text, false);
}
else
{
    FormsAuthentication.SetAuthcookie(txtUserName.text, false);
    Response.Redirect("Default.aspx");
}
于 2011-03-22T08:52:39.407 に答える