在使用TempData时,我的理解是它只会为一个请求保留您放在其中的所有内容。因此,当使用TempData跨重定向保留数据时(为了使用Post- request -Get模式),在发送重定向的响应和请求重定向页面的用户浏览器之间,来自用户的一些其他请求不可能进入服务器吗?在哪种情况下,get将不再有可用的TempData,对吗?
现在,我知道这种情况很少发生,但考虑到用户可能会在另一个选项卡中打开另一个页面,并且该页面上可能会发生ajax或timed回调请求,所以对我来说,这似乎并不是那么不可能。这是不是通常被认为太遥远而不值得担心,或者是我误解了什么?
编辑:更具体地说,关于我所询问的场景。
<>H19在Tab 2中,计时ajax回调发生,向服务器发送GET请求。TempData将从选项卡1中的session
发布于 2008-10-24 18:31:02
好的,浏览ASP.NET MVC代码可以看到,虽然TempData存储在会话中,但在加载时,它会从会话中删除。并将其加载到控制器的ExecuteCore()方法中。
因此,我认为这将意味着是的,您完全可以遇到来自不同浏览器选项卡的请求可能导致此问题的竞争条件(您有一个非常好的示例)。但这将取决于每个浏览器处理请求的模型。浏览器可能会将所有请求序列化到同一服务器,以便一次只执行一个请求。但实际上,他们不会这么做,他们会将其限制在最大值,即(我认为)对同一服务器的5个并发请求。
鉴于ASP.NET MVC站点可以是对任何浏览器(毕竟是web :)的服务请求,这是一个真实的场景,尽管如您所说,这可能是一个罕见的场景。
发布于 2008-10-26 16:43:23
在使用TempData时,完全有可能出现竞争条件。然而,在正常使用的情况下,你当然必须“倒霉”。为了遇到竞争条件,必须满足以下所有条件:
请注意,第2项在很大程度上取决于您使用的浏览器。根据IE的设置,打开多个窗口并不意味着它们共享浏览器cookies,因此它们不一定共享会话(基于cookies)。
但是,如果遇到某个东西就会爆炸,这就不存在竞争条件了。这可能就是Haacked所指的。但是,您可以在某种意义上达到竞争条件,即您在一个请求中设置了一些TempData,然后在您认为将获得它的下一个请求中没有得到它。它只会是空的。
谢谢,Eilon
发布于 2008-10-24 16:42:07
TempData使用了Session对象AFAIK,它不会遇到这个问题。你在这方面遇到过什么特殊的问题吗?
https://stackoverflow.com/questions/235665
复制相似问题