0

我有一个会话变量,用于存储数据表(根据用户希望如何添加/删除项目(数据表中的数据项目)而变化。

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

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

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

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

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

4

2 回答 2

1

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

重要的是要记住,您需要将发送给客户端的任何内容都视为受损数据。另一种说法是,如果您对拥有允许他们输入该数据的每一位的表单的用户感到满意,那么就可以了。

总而言之,视图状态通常是签名的,但历史证明是遵循一般安全建议的好主意。

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

最后关于清除该会话值之后,asp.net mvc 对其所谓的 TempData 执行类似的操作。其使用场景:在非发布场景+以及您不希望在查询字符串中使用时,将一些数据从一页传递到下一页。

于 2013-07-01T12:45:09.220 回答
0

是的,你可以做到。但是由于额外的开销,视图状态往往会减慢页面加载速度。如果您的数据集很小,那没关系,但如果它更大,则寻找其他替代方案。

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

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

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

于 2013-07-01T12:43:11.170 回答