2

「Remember Me」オプションをサポートするログイン コントロールがあります。
マークアップ

<asp:Login ID="UsersLogin" runat="server" OnAuthenticate="UsersLogin_Authenticate" DisplayRememberMe="true"
            CssClass="usersLogin" FailureText="The username or password you supplied is incorrect"
            Width="100%">
</asp:Login>

コードビハインド:

protected void UsersLogin_Authenticate(object sender, AuthenticateEventArgs e)
{
    Page.Validate(); // Executes the validation controls against the input controls.
    if (!Page.IsValid) return; // Return from the function, incase validation fails.
    e.Authenticated = Membership.ValidateUser(UsersLogin.UserName, UsersLogin.Password);
    FormsAuthentication.RedirectFromLoginPage(UsersLogin.UserName, UsersLogin.RememberMeSet);
}

実行された手順と私の観察 (間違っている可能性があります):
1)。ユーザーは資格情報を入力し、[Remember Me] チェックボックスをオンにします。ASP.NET は、クライアント側で永続的な Cookie を作成します。
2)。次に、ASP.NET は、"returnUrl" クエリ文字列パラメーターで示される保護されたリソースにユーザーを移動します (利用可能な場合)。それ以外の場合は、web.config のタグの "DefaultUrl" プロパティで指定されたページにユーザーをリダイレクトします。
3)。ユーザーがブラウザを閉じます。
4)。ユーザーはブラウザを再度開き、同じ保護されたリソースへの URL を入力します。ASP.NET は、永続的な Cookie により、その保護されたリソースへのアクセスを許可します。
5)。ここで、ユーザーはログイン ページに移動します。ASP.NET は、ユーザー名とパスワードのテキスト ボックスを入力し、"

ステップ5は私が立ち往生しているところです。手順 5 を確実にするのが ASP.NET の責任かどうか
はわかりません。この問題が何度も尋ねられていることは承知していますが、多くは単なる回避策であったため、合理的な解決策は見つかりませんでした。独自の FormsAuthenticationTicket を作成し、UserData を追加して、me の記憶状態を保存することを提案するソリューションがいくつかありました。web.config にタグを明示的に書き留め、タイムアウト、パスなどを含むすべてのパラメーターを明示的に指定することをお勧めします。

また、次のステートメントについても訂正してください。「「LoginStatus」コントロールをクリックするか、通常のリンク ボタンを使用して通常のリンク ボタンをクリックして書き込むことにより、アプリケーションからログアウトすると、ASP.NET は永続的な Cookie を削除します "FormsAuthentication.Log(); FormsAuthentication.RedirectToLoginPage()"

ログイン コントロールで [Remember Me] チェックボックスをオンにするには、何をする必要があるか、アドバイスをお願いします。前もって感謝します。

4

1 に答える 1

1

私は解決策を見つけたと思います。これは、チェックボックスをオンにするために行ったことです。

if (User.Identity.IsAuthenticated)
    {
        FormsIdentity identity = User.Identity as FormsIdentity;
        FormsAuthenticationTicket ticket = identity.Ticket;
        if (ticket.IsPersistent)
        {
            UsersLogin.RememberMeSet = true;                    
        }            
    }

ユーザーが [Remember Me] チェックボックスをオンにした場合、チケットは永続的なチケットになります。

とにかく、ありがとう。

于 2012-05-29T09:12:50.370 に答える