Isn';用户登录asp.net后是否会发生事件?
在用户登录到我的asp.net web应用程序后,我想在用户会话中写入一些数据。但似乎没有一个合适的活动来做这件事。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
我在我的
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。