我有一个MVC3网络应用程序,它使用默认的“进程中”会话。我已经实现了PRG模式 - 即如果我的模型状态无效,则回发时我将模型存储在TempData中并重定向到原始的get动作。在get动作中,我获取模型数据(如果存在)并发送到视图。我相信这是MVC的基本方面之一。
我已经了解到背景中的TempData是一个会话变量 用于PRG过渡。我需要知道的是它是否是 可能有冲突或交叉退让 - 如果我使用的话 像两个页面中的TempData [“model”]并访问页面 同时。这会覆盖公共数据吗? TempData [“model”]或者如果我使用相同的tempdata名称是安全的 两个不同的页面。
它与Session [“model”]类型的数据有冲突吗?我面临一些意外的会话数据损坏 - 可能是由于我的内部代码重置了会话数据或其他内容。会话数据是否可能部分损坏?我的意思是Session [“data1”]没问题,但是Session [“data2”]已经消失了?
我的用户经常长时间使用网络应用程序导致会话超时。我尝试使用ASP.Net会话状态服务进行会话,但这会导致性能问题,因为我存储了一些重物(通过序列化)在会话中。所以最后我回到了处理模式的原始默认值。
如果你有类似的经历,请分享。
答案 0 :(得分:0)
默认情况下,TempData使用SessionState,默认情况下对SessionState的访问权限是独占的。因此,如果您执行两个并发请求,则必须等待另一个释放SessionState锁。 TempData不会干扰直接使用SessionState。 由于SessionState默认使用in-proc,因此几乎可以随时无效。
您可能需要查看http://brockallen.com/2012/06/11/cookie-based-tempdata-provider/