长期使用& Session / TempData的冲突

时间:2013-03-13 17:08:36

标签: asp.net-mvc-3 session session-timeout tempdata

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

  

我已经了解到背景中的TempData是一个会话变量   用于PRG过渡。我需要知道的是它是否是   可能有冲突或交叉退让 - 如果我使用的话   像两个页面中的TempData [“model”]并访问页面   同时。这会覆盖公共数据吗?   TempData [“model”]或者如果我使用相同的tempdata名称是安全的   两个不同的页面。

它与Session [“model”]类型的数据有冲突吗?我面临一些意外的会话数据损坏 - 可能是由于我的内部代码重置了会话数据或其他内容。会话数据是否可能部分损坏?我的意思是Session [“data1”]没问题,但是Session [“data2”]已经消失了?

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

如果你有类似的经历,请分享。

1 个答案:

答案 0 :(得分:0)

默认情况下,TempData使用SessionState,默认情况下对SessionState的访问权限是独占的。因此,如果您执行两个并发请求,则必须等待另一个释放SessionState锁。 TempData不会干扰直接使用SessionState。 由于SessionState默认使用in-proc,因此几乎可以随时无效。

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