如何避免页面过期?

时间:2010-12-22 14:49:29

标签: html http

在哪些情况下我会在IE中获得页面过期错误? (它似乎永远不会出现在FF?)

我正在尝试避免在以下情况中页面过期:

  

page1:使用post和output page.2。

     

第2页:使用post但是   enctype = multipart和output page3

     

第3页:使用post和output page.4。

     

第4页:没有表格。

当我浏览每个页面时,除第4页外,我可以使用每个页面上的后退按钮。在带有enctype = multipart的表单的页面之后回到页面似乎是不可能的?在这种情况下,我总是在第3页上过期页面。有人可以解释为什么会这样,以及如何允许用户在每个页面使用后退按钮,无论使用什么方法(POST / GET)(如果可能的话)?

我知道你可以通过实施PRG pattern来解决它,但这不是一个真正的选择。

请注意,enctype = multipart的页面必须具有type = file的输入才能触发此行为。如果我删除所有文件输入,我可以毫无问题地前后使用。

谢谢!

2 个答案:

答案 0 :(得分:1)

那是不可能的。你最好的选择是PRG。您可以在重定向之前将基于请求的感兴趣数据存储在会话中,并在重定向之后从会话中删除。为了防止用户在完全相同的时刻提交其中2个表单的(非常罕见的)边缘情况,请沿着基于唯一请求的密钥将其存储在会话中的某个映射或关联数组中,并将该密钥作为URL参数或路径信息传递给重定向URL,然后从会话中删除与密钥关联的数据。

答案 1 :(得分:0)

今天我遇到了同样的问题。这似乎是IE中的一个错误,因为它在Firefox和Chrome中运行良好。与OP一样,在我的情况下使用PRG模式不是一个选项。

我能想出的唯一解决方法是在第3页的标签上添加target =“_ blank”,这会导致第4页在新的浏览器窗口/标签页中打开(从而在原始窗口中保持第3页仍然打开/ tab,以便它仍然可供用户使用。)不幸的是,根据您的具体要求,这可能不适用于所有情况。