【发布时间】:2012-07-12 15:44:38
【问题描述】:
我有一个用户在登录页面登录的 asp.net 应用程序。我创建了一个 Employee 对象并将 loginID 存储在该页面的 button_click 事件中。
如何让 Employee 对象在整个应用程序中保持活动状态(不必每次都将 Employee 对象作为参数传递)?
【问题讨论】:
我有一个用户在登录页面登录的 asp.net 应用程序。我创建了一个 Employee 对象并将 loginID 存储在该页面的 button_click 事件中。
如何让 Employee 对象在整个应用程序中保持活动状态(不必每次都将 Employee 对象作为参数传递)?
【问题讨论】:
这往往是Session State 的用途,用于存储会话范围的项目。
在会话之外存储员工对象可能意味着与该对象相关的用户实际上不再使用您的站点,因此将对象保留在内存中可能毫无意义。
如果您确实希望整个应用程序都使用它,那么 Application State 可能值得一看。
【讨论】:
您可能想看看使用Session data。
这是一种让对象与给定会话关联和持久化的简单方法,但有一些注意事项(它可能会对性能产生影响,具体取决于您的数据存储是什么、您要持久化的对象有多大/复杂度以及您正在处理多少并发用户)。
【讨论】:
给定类是:
[Serializable]
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
保存到会话:
protected void DoLogin()
{
Employee employee = new Employee()
{
Id = 1,
FirstName = "John",
LastName = "Smith"
};
// save it to session
Session.Add("Employee", employee);
}
从会话中获取它。请注意,它需要转换为“Employee”:
protected Employee GetEmployee()
{
if (Session["Employee"] != null)
{
// needs to be cast
return (Employee)Session["Employee"];
}
else
{
return null;
}
}
为了方便使用,我通常将这些东西包装到一个属性中。不过,您通常在会话中不需要这样的对象......也许您正在寻找的是:ASP.NET MVC - Set custom IIdentity or IPrincipal
【讨论】: