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