用户登录asp.net后是否有事件?

时间:2013-06-28 19:26:06

标签: asp.net events login

我希望在用户登录我的asp.net Web应用程序后将一些数据写入用户会话。但似乎没有适当的事件。
我在LoggedIn上尝试了Login.aspx.cs活动,但此时HttpContext.Current.User.Identity.IsAuthenticatedfalse。我知道这是默认行为,之后标志设置为true,例如重定向后。
那么有什么时候这样做吗?

3 个答案:

答案 0 :(得分:1)

为什么不检查Page_Load重定向的位置Login.aspx,如下所示:

Page_Load of Home.aspx: I made up Home.aspx, but that is a common landing page name
if(!Page.IsPostBack)
{
    if(HttpContext.Current.User.Identity.IsAuthenticated)
    {
        // Write into session here
    }
}

答案 1 :(得分:1)

对于您的方案,理想的方法是使用LoggedIn

LoggedIn内部方法中,您可以检索UserName

原因IsAuthenticated为false,因为尚未创建IPrincipal对象。但是,您可以自己在LoggedIn方法中创建它。

<asp:Login ID="LoginUser" OnLoggedIn="LoginUser_LoggedIn">
...
</asp:Login>

protected void Login_LoggedIn(object sender, EventArgs e)
{
    var username = LoginUser.UserName;

    // Log user
    .....

    // If you really want to create IPrincipal object, you can create like this -
    var identity = new GenericIdentity(username);
    var principal = new GenericPrincipal(identity, null);
    Context.User = principal;
    Thread.CurrentPrincipal = Context.User;
}

以下是creating Principal object的示例。

注意:我不知道为什么要在LoggedIn事件中检查IsAuthenticated的原因。通常我们不需要自己创建Principal对象。

答案 2 :(得分:0)

可以从Global.asax处理OnAuthenticateRequest事件。你只需要为它添加一个HttpModule。

http://msdn.microsoft.com/en-us/library/szzd570s(v=vs.71).aspx

更新: 我没有试过这个,但它应该是你的情况的解决方案。 http://www.nullskull.com/articles/20030211.asp