我正在使用表单身份验证编写Web应用程序,该身份验证根据用户登录的时间在用户之间共享消息。我使用名为CurrentUser
的类来存储当前用户的信息。我需要每个访问者拥有自己的这个类的实例,并且我试图将它放在HttpContext.Current.Items
中。这是我的班级:
public class CurrentUser
{
public DateTime JoinRoomTime;
public static CurrentUser Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if (!items.Contains("TheInstance"))
{
items["TheInstance"] = new CurrentUser();
}
return items["TheInstance"] as CurrentUser;
}
}
public CurrentUser()
{
JoinRoomTime = DateTime.Now.ToUniversalTime();
}
}
每次引用CurrentUser.Instance.JoinRoomTime
时,都会调用构造函数,重置JoinRoomTime
。调试时,我发现每次对items["TheInstance"] = new CurrentUser()
的引用都会调用Instance
。为什么不保存到HttpContext.Current.Items
?
答案 0 :(得分:1)
每当我引用CurrentUser.Instance.JoinRoomTime时,都会调用构造函数,重置JoinRoomTime。
意思是,在新请求中引用? HttpContext.Current
是按请求,当前请求的HttpContext
。在发出新请求时会重新初始化。
答案 1 :(得分:1)
HttpContext.Current的范围限定为单个HTTP请求。与之关联的数据不会在请求之间保留。