在用户登录我的 asp.net Web 应用程序后,我想将一些数据写入用户会话。但似乎没有合适的活动。
我在我的身上尝试了这个LoggedIn
事件,Login.aspx.cs
但HttpContext.Current.User.Identity.IsAuthenticated
在false
那一刻。我知道这是默认行为,然后标志设置为true
,例如在重定向之后。
那么是否有合适的时机来做这件事呢?
问问题
254 次
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 对象的示例。
注意:我不知道您为什么要检查IsAuthenticated
LoggedIn 事件的原因。通常我们不需要自己创建 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 回答