0

我有一个 MVC3 Web 应用程序,它使用默认的“进程中”会话。我有 PRG 模式 - 如果我的模型状态无效,则在回发时,我将模型存储在 TempData 中并重定向到原始 get 操作。在获取操作中,我获取模型数据(如果存在)并发送到视图。我相信这是 MVC 的基本方面之一。

我了解到后台的 TempData 是一个会话变量,用于 PRG 转换。我需要知道的是是否有可能发生冲突或交叉引用 - 如果我在两个页面中使用 TempData["model"] 之类的东西并同时访问这些页面。是否会覆盖 TempData["model"] 中的公共数据,或者如果我在两个不同的页面中使用相同的临时数据名称是否安全。

它是否与 Session["model"] 类型的数据冲突?我正面临一些意外的会话数据损坏 - 可能是由于我的内部代码重置了会话数据或其他原因。会话数据是否有可能部分损坏?我的意思是 Session["data1"] 没问题,但 Session["data2"] 不见了?

我的用户经常长时间使用网络应用程序导致会话超时。我为会话尝试了 ASP.Net 会话状态服务,但这导致了性能问题,因为我在会话中存储了一些重对象(通过序列化)。所以最后我回到了进程模式下的原始默认值。

如果您有任何类似的经历,请分享。

4

1 回答 1

0

TempData 默认使用 SessionState,对 SessionState 的访问默认是独占的。所以,如果你做两个并发请求,一个必须等​​待另一个释放 SessionState 锁。TempData 不会直接干扰使用 SessionState。由于 SessionState 默认使用 in-proc,它几乎可以随时失效。

您可能想看看http://brockallen.com/2012/06/11/cookie-based-tempdata-provider/

于 2013-10-25T14:34:32.570 回答