1

在用户登录我的 asp.net Web 应用程序,我想将一些数据写入用户会话。但似乎没有合适的活动。
我在我的身上尝试了这个LoggedIn事件,Login.aspx.csHttpContext.Current.User.Identity.IsAuthenticatedfalse那一刻。我知道这是默认行为,然后标志设置为true,例如在重定向之后。
那么是否有合适的时机来做这件事呢?

4

3 回答 3

1

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

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

原因IsAuthenticated是错误的,因为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;
}

这是创建 Principal 对象的示例。

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

于 2013-06-28T20:04:25.903 回答
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
    }
}
于 2013-06-28T19:30:54.117 回答
0

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

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

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

于 2013-06-28T20:32:27.853 回答