我想创建一个从会话状态中检索数据的类,是否正在按照以下方法进行操作?
我有一个静态类和静态方法来获取数据
[AuthorizeMember]
public class TestController : Controller
{
public ActionResult list()
{
Session["memberid"] = 12345;
return View();
}
public ActionResult iteminfo(string prodcode)
{
int memberid=SessionData.MemberTableId();
}
}
public static class SessionData
{
public static int MemberTableId()
{
return Convert.ToInt32(HttpContext.Current.Session[memberid]);
}
}
答案 0 :(得分:2)
静态类将在所有登录的会话中提供相同的内容。
除非您完全了解静态应用程序的工作方式,否则请避免在Web应用程序中使用静态类。
选项1:
您可以直接将值放入会话中,如代码示例所示。
好处是您不需要编写任何包装器。
缺点是任何人都将继续为会话添加任何值,并且在应用程序增长之后,没有人会知道您在会话中保留哪些数据。
选项2 :
或者您可以创建一个类来将所有会话值保存在一起。
每当您想读取会话值时,都始终从此类中读取。
将此类标记为可序列化,以便将来,如果要将会话状态保留在SQL Server或REDIS缓存等其他服务器上,则只需进行最小的配置更改即可。
这样,您将始终知道会话中输入的所有值。
例如您可以使用一个类来保存所有会话值
[Serializable] //// This is required when using out of proc session state
public class MySessionState
{
public string Username {get; set;}
public string Role {get; set;}
public string FirstName{get; set;}
public string LastName {get; set;}
public int Age{get; set;}
}
创建一个const键以引用该类对象
public const string MySessionObjectKey = "mysessionstate";
然后在控制器操作中可以像这样使用它:
public void MyAction()
{
var sessionState = Session[MySessionObject] as MySessionState;
if (sessionState == null)
{
sessionState = new MySessionState();
}
sessionState.FirstName = "SomeName";
sessionState.LastName = "SomeOtherName";
/// Process this session object
Session[MySessionObjectKey] = sessionState;
}
希望这对您有所帮助。