ASP.NET MVC维护对象Session

时间:2015-01-26 07:55:09

标签: c# asp.net asp.net-mvc session

我有网站,用户需要做一些简单的步骤1 - 步骤4,所以我决定将所有数据保存到会话对象中,在步骤2 - 步骤4用户可以返回上一步检查表格(数据)将填写会议)

我的问题是。我们可以将新值/对象存储到会话中,同时保持以前的值吗?

Session["regis"] = student.firstname

// i want object_a value still remain in Session["regis"]
Session["regis"] = student.lastname

或者我应该制作超过1个会话?

Session["Step1"] = student.firstname

Session["Step2"] = student.lastname

3 个答案:

答案 0 :(得分:1)

是。您可以在不同密钥下的会话中存储多个值,如第二个示例中所示(请注意,这是同一个会话) ,只是一个不同的关键)。但是,这不符合您的要求:

Session["regis"] = student.firstname

// This will overwrite the first value
Session["regis"] = student.lastname

您也可以考虑将整个视图模型存储在一个键下。

但是,在会话中存储东西时要小心。很容易引起不良行为。例如 - 应用程序池可能会过期,丢失会话数据;如果您在负载平衡环境中运行,则用户在访问其他应用程序服务器时可能会丢失会话;如果用户正在运行多个选项卡,则来自一个选项卡的请求中分配的会话变量可能会干扰应用程序在另一个选项卡中的行为等。

请考虑使用Cookie或隐藏字段。如果必须使用会话变量,最好至少生成动态密钥并在查询字符串中将这些密钥从一个页面传递到另一个页面,以确保例如使用多个选项卡不会导致密钥冲突。

答案 1 :(得分:0)

如果在您的情况下使用相同的密钥为会话对象分配新值,即 regis ,则会丢失先前的值因此您需要使用第二个选项。

您可以使用stage创建/访问会话对象,如

在会话中设置值

Session["Step" + stepIndex] = student.firstname;

从会话中获取价值

string str = Session["Step" + stepIndex].ToString();

答案 2 :(得分:0)

另一种选择是将对象存储在会话中。 (假设学生是学生班的实例)

private Student StudentSession
{
    get{ return (Student)Session["regis"]; }
    set{ Session["regis"] = value; }
}

用法,

StudentSession = new Student();

StudentSession.Name = "Scott";
StudentSession.Surname = "Foo";

您可以稍后在另一页上分配aditional变量。

StudentSession.Age = 12;