为了防止提交页面中的会话变量过期,我应该将会话变量分配给viewstate变量吗?

时间:2013-07-01 12:23:49

标签: c# asp.net

我有一个会话变量,用于存储数据表(根据用户希望添加/删除项目的方式(数据表中的数据项)进行更改。

在整个Web应用程序的最后一页,我有一个提交页面,允许用户在数据表中提交所选项目。

因为我认为如果页面打开时间过长,会话变量可能会过期,并且为了防止过期变量引起的错误,在page_load函数中!IsPostBack我将会话变量分配给viewstate变量(因此数据将被存储在页面的viewstate中而不会过期。)

if(!IsPostBack){ ViewState["myDataTable"] = Session["myDataTable"]}

1)这是标准做法,在将会话变量分配给视图状态时是否存在任何影响/错误?

2)致电ViewState["myDataTable"] = Session["myDataTable"]后,可以Session["myDataTable"] = null吗?

2 个答案:

答案 0 :(得分:1)

这实际上取决于您所拥有的数据的种类和大小。

关键是要记住,您需要将发送给客户端的任何内容视为受损数据。换句话说,如果你可以使用一个允许他们输入该数据的每一位的表格的用户,那么只有这样才可以。

所有人都说,视图状态通常是签名的,但history as proven是遵循该一般安全建议的好主意。

至于大小,您需要密切关注每个请求所交换的数据量。

最后关于清除该会话值之后,asp.net mvc与它所谓的TempData类似。其使用方案:在非帖子场景中将一些数据从一个页面传递到下一个页面+当您不希望它出现在查询字符串中时。

答案 1 :(得分:0)

是的,你可以做到。但由于额外的开销,viewstate往往会减慢页面加载速度。如果你的数据集很小,那就没关系,但如果你的数据集更大,那就寻找其他选择。

我怎么会建议不要使用这种方法[安全问题,慢等],而是设备一种方式,以便会话剂量在任何页面打开时到期?怎么样??使用jquery / ajax定期维护与服务器的连接。

如果你想进一步实现sql session。这将是最好的。

希望这些信息对您有所帮助。