Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isn';用户登录asp.net后是否会发生事件?_Asp.net_Events_Login - Fatal编程技术网

Isn';用户登录asp.net后是否会发生事件?

Isn';用户登录asp.net后是否会发生事件?,asp.net,events,login,Asp.net,Events,Login,在用户登录到我的asp.net web应用程序后,我想在用户会话中写入一些数据。但似乎没有一个合适的活动来做这件事。 我在我的Login.aspx.cs上尝试了LoggedIn事件,但是HttpContext.Current.User.Identity.IsAuthenticated此时为false。我知道这是默认行为,在此之后,标志设置为true,例如重定向后。 那么什么时候做这件事合适吗?为什么不在页面的页面中检查一下您的Login.aspx重定向的位置,如下所示: Page_Load of

在用户登录到我的asp.net web应用程序后,我想在用户会话中写入一些数据。但似乎没有一个合适的活动来做这件事。
我在我的
Login.aspx.cs
上尝试了
LoggedIn
事件,但是
HttpContext.Current.User.Identity.IsAuthenticated
此时为
false
。我知道这是默认行为,在此之后,标志设置为
true
,例如重定向后。

那么什么时候做这件事合适吗?

为什么不在
页面的
页面中检查一下您的
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
    }
}

对于您的场景,理想的方法是使用
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;
}


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

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

更新: 我没有试过,但这应该是一个解决你的情况。

想想“登录”是什么意思(也要避免,
WebControls
)。请告诉我们更多关于您如何实际验证用户的信息。您是在使用
会员资格
功能还是在做一些更为定制的事情?我使用直接
asp:Login
与客户
会员资格提供商
一起登录。这很有效,我当时已经做到了。问题是,每次用户调用登录页(例如刷新)时,数据都会写入会话。我理解,但是你不是在检查人们在你的页面加载中是否经过身份验证吗?你也可以检查
会话
值是否已经存在,然后再次跳过写入
会话
。你的上一个建议也是我最后的想法。因此,如果没有更好的解决方案,我就必须这样做。不幸的是,在这一点上,
会话
null
,我无法将数据写入其中。我知道我的场景有点扭曲了框架。但不管怎样,你的解决方案和解释是好的,有效的。所以thx。