给出以下主页或内容页...............
namespace Intranet
{
public partial class Site : System.Web.UI.MasterPage
{
WebSite.Security.Users.CurrentUser currentUser;
protected void Page_Init(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
currentUser = new WebSite.Security.Users.CurrentUser();
currentUser = WebSite.Security.Users.GetCurrentUser(currentUser);
Label_UserId.Text = currentUser.UserId;
}
}
}
}
调用以下内容............
namespace Intranet
{
public class WebSite
{
public class Security
{
public class Users
{
public class CurrentUser
{
public string UserId { get; set; }
}
public static CurrentUser GetCurrentUser(CurrentUser cu)
{
cu.UserId = "MethodThatGetsUserId";
return cu;
}
}
}
}
}
返回的实例化类'currentUser'是否包含唯一信息,即使页面上同时有多个不同的用户?
感谢您的时间和见解。
答案 0 :(得分:3)
是的,即使不是每个用户,也会为每个请求实例化一个新类。
将共享类中的静态字段,您应该使用会话和应用程序数据跨请求或用户共享数据。
答案 1 :(得分:2)
不,这一行:
currentUser = new WebSite.Security.Users.CurrentUser();
您正在母版页类中创建新实例。除非您使用request
变量,否则每个static
中创建的实例仅在该请求中可用(当然,具体取决于范围)。在您的应用程序中,all users/threads
的静态变量是相同的。
但是,您实际想要做的是获取当前用户。这应该使用HttpContext.Current.User
或Page.Current
IPrincipal
来完成,并且应该包含您在应用的Authenticate_Request
方法中填写的信息。
要了解有关ASP.NET表单身份验证的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/9wff0kyh(v=vs.100).aspx