首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当通过重定向使用Asp.Net MVC TempData时,是否存在可能的“竞争条件”?

当通过重定向使用Asp.Net MVC TempData时,是否存在可能的“竞争条件”?
EN

Stack Overflow用户
提问于 2008-10-25 00:10:27
回答 4查看 3.1K关注 0票数 16

在使用TempData时,我的理解是它只会为一个请求保留您放在其中的所有内容。因此,当使用TempData跨重定向保留数据时(为了使用Post- request -Get模式),在发送重定向的响应和请求重定向页面的用户浏览器之间,来自用户的一些其他请求不可能进入服务器吗?在哪种情况下,get将不再有可用的TempData,对吗?

现在,我知道这种情况很少发生,但考虑到用户可能会在另一个选项卡中打开另一个页面,并且该页面上可能会发生ajax或timed回调请求,所以对我来说,这似乎并不是那么不可能。这是不是通常被认为太遥远而不值得担心,或者是我误解了什么?

编辑:更具体地说,关于我所询问的场景。

  1. 在Tab 1中用户浏览到具有Tab 2中的post form
  2. 的页面用户浏览器到站点上的另一个页面,该页面在tab 1中的timer
  3. 上执行ajax回调,用户将表单发布到服务器
  4. 当服务器收到post时,它将一些数据保存在TempData中并发回重定向响应

<>H19在Tab 2中,计时ajax回调发生,向服务器发送GET请求。TempData将从选项卡1中的session

  1. 中删除,浏览器收到重定向并发出GET请求
  2. 服务器处理GET请求并查找TempData,但它不再存在
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-25 02:31:02

好的,浏览ASP.NET MVC代码可以看到,虽然TempData存储在会话中,但在加载时,它会从会话中删除。并将其加载到控制器的ExecuteCore()方法中。

因此,我认为这将意味着是的,您完全可以遇到来自不同浏览器选项卡的请求可能导致此问题的竞争条件(您有一个非常好的示例)。但这将取决于每个浏览器处理请求的模型。浏览器可能会将所有请求序列化到同一服务器,以便一次只执行一个请求。但实际上,他们不会这么做,他们会将其限制在最大值,即(我认为)对同一服务器的5个并发请求。

鉴于ASP.NET MVC站点可以是对任何浏览器(毕竟是web :)的服务请求,这是一个真实的场景,尽管如您所说,这可能是一个罕见的场景。

票数 9
EN

Stack Overflow用户

发布于 2008-10-27 00:43:23

在使用TempData时,完全有可能出现竞争条件。然而,在正常使用的情况下,你当然必须“倒霉”。为了遇到竞争条件,必须满足以下所有条件:

  1. 您必须首先使用TempData。
  2. 您必须打开多个浏览器窗口/选项卡/任何内容,并共享同一浏览器会话。
  3. 来自第二个浏览器选项卡的请求必须在第一个浏览器选项卡的请求和响应之间“潜入”。

请注意,第2项在很大程度上取决于您使用的浏览器。根据IE的设置,打开多个窗口并不意味着它们共享浏览器cookies,因此它们不一定共享会话(基于cookies)。

但是,如果遇到某个东西就会爆炸,这就不存在竞争条件了。这可能就是Haacked所指的。但是,您可以在某种意义上达到竞争条件,即您在一个请求中设置了一些TempData,然后在您认为将获得它的下一个请求中没有得到它。它只会是空的。

谢谢,Eilon

票数 4
EN

Stack Overflow用户

发布于 2008-10-25 00:42:07

TempData使用了Session对象AFAIK,它不会遇到这个问题。你在这方面遇到过什么特殊的问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/235665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档