在safari中完全缺少viewstate字段

时间:2010-12-09 15:43:10

标签: asp.net viewstate

这种情况发生在多个版本的Safari中,包括5.x

它将发布_ EVENTTARGET =& _EVENTARGUMENT =但__VIEWSTATE =

没有

这只发生在Safari中,并且只发生在我们网站的一个页面上。

我无法重现它 - 我们花了几天时间试图。

此页面上的viewstate不是太大了。

谢谢!

2 个答案:

答案 0 :(得分:1)

我们遇到了很多版本3的viewstate问题.Safari为可以在任何一个字段中显示的数据量设置了限制,这些字段会被发布回服务器。

我们解决问题的方法是将viewstate设置为跨越多个输入控件。

您可以在web.config的system.web / pages部分执行此操作。例如:

<system.web>
  <pages maxPageSTateFieldLength="500" />
</system.web>

您可能需要使用该值。我不记得各种版本的safari有什么限制。有几个人说过1k,但如果我从测试中记得正确,有些版本只传递了大约500字节。

另一种选择是存储viewstate服务器端。您可以看到this here的示例。您还应该阅读有关潜在问题的this blog。我们确实尝试过这条路径并最终放弃了它,因为它与我们正在进行的其他一些加密事件相冲突。

答案 1 :(得分:0)

(与之前的回答不同)

总结到目前为止我们所知道的事情:

  1. only safari
  2. 仅限特定页面
  3. 混合中有一个名为StrangeLoop的设备,它在出路时删除了视图状态,并在页面回发时将其重新放入。它通过某种类型的令牌值来实现。
  4. 几个问题: 首先,这仅限于特定客户或一组人吗?我问,因为它可能是“唯一的”野生动物园很重要。

    第二,StrangeLoop设备是否具有某种类型的超时值或流量限制,其中令牌缓存被垃圾收集?

    我可以设想一个特定客户端进入此页面并暂停一段时间(10分钟......更长时间?)的场景。在此期间,要么满足超时值,要么强制您使用异常环路设备为此特定客户端抛出视图状态的流量。然后当他们继续并回发时,设备没有视图状态注入html流。

    在我看来,为了让你根本没有任何视图状态,设备本身一定不能注入它。我能想到的唯一原因是,如果令牌值不是由safari发送的(不太可能因为它必须非常小),或者设备无法在其缓存表中找到匹配项。

    设备是否有任何类型的日志记录或指标,您可以看到它是否与传入的令牌值不匹配?

    类似的想法是,如果这个页面有一些ajax正在进行。设备是否为每个请求发回不同的令牌,或者单个客户端浏览器是否为整个浏览会话保留令牌?如果它发送一个不同的令牌..那么它可能是safari没有用新的令牌值正确地更新自己的客户端。虽然这条路应该很容易复制。