3

我使用 Visual Studio 的模板创建了一个新的 asp.net Web 应用程序。这种类型的项目创建了一个开箱即用的登录,我使用aspnet_regsql命令配置它以使用我的数据库。

现在,当有人登录应用程序时,我需要知道登录是否成功,因此我可以保存Session['']用户名等。

我期待找到一个返回 true 或 false 的方法,但在 Login.aspx.cs 中只是该Page_Load方法,我不明白它是如何工作的。

我尝试关联一个获取UserName控件值的 onclick 方法,但显然,这仅在用户第一次登录时有效,如果用户选中“下次记住我”它将不起作用。

4

2 回答 2

2

当用户通过身份验证时会引发AuthenticateRequest事件,但是在这种情况下,您还没有访问 SessionState 的权限。因此,要保存Session您应该考虑PostAcquireRequestState应用程序事件。

IIS 7.0 的 ASP.NET 应用程序生命周期概述

IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

有关其他信息:

例子:

在 global.asax

    void Application_PostAcquireRequestState(object sender, EventArgs e)
    {
        if (Context.Session != null)
        {
            Application.Lock();
            Session["user"] = User.Identity.Name;
            Application.UnLock();
        }
    }

此外,如果您使用LoginControl,您可以处理该LoggedIn事件:

ASPX

    <asp:Login runat="server" ID="login" DestinationPageUrl="~/Default.aspx" 
        FailureAction="RedirectToLoginPage"
        onloggedin="login_LoggedIn" ...>
     ....

ASPX 代码背后

protected void login_LoggedIn(object sender, EventArgs e)
{
    // set the Session here
}
于 2012-07-31T04:37:27.913 回答
1

aspx web 项目模板使用asp:Login控件,它为您进行身份验证。

如果您需要自定义登录,您可以滚动您自己的用户名/密码输入,然后直接调用会员API,例如

if (Membership.ValidateUser(username, password))
{
    FormsAuthentication.SetAuthCookie(username, rememberMe);
    // Do your custom stuff here

...

您还可以使用以下方法检查用户是否已通过身份验证

UserPrincipal.Identity.IsAuthenticated

有关详细信息,请参阅MSDN

于 2012-07-31T04:41:34.320 回答