会话变量的浏览器缓存不一致 - 任何解决方案?

时间:2009-02-19 16:18:12

标签: session caching

为什么我的会话变量会被删除?

我使用提交按钮提交表单并创建值的会话变量以允许它们被传送到其他页面。一切都很好。如果我现在使用浏览器按钮在表单和表单处理程序之间前后移动(有些用户可能会这样做)Firefox和Opera会调用会话变量并填充表单处理程序。但IE和Safari却没有。我该怎么办呢?

如果今天早上我没有在头文件中插入以下内容,Firefox会证明问题:

header("Cache-Control: no-cache");
header("Expires: -1");

我已经读过第二个标题行 - header("Expires: -1"); - 也应该是IE的修复,但似乎并非如此。 IE8 / Safari仍然显示问题。 Opera根本不需要这个。如果这是一个重载问题,我需要添加到标题以强制IE和Safari重新加载?

由于

1 个答案:

答案 0 :(得分:2)

您的会话变量不会丢失。相反,正在发生的事情是,当回头时,没有一个浏览器会从服务器重新加载表单(默认值从会话变量填充。)然而,有些浏览器会对它很好并记住自己的值是什么上次提交该特定表单时最后的表单字段,并为您填写。 IE不会。

在任何情况下,最好通过POST提交表单,并让服务器通过重定向(HTTP 302)响应POST到下一页,而不是渲染下一页直接。通过发出重定向,用户返回的任何尝试都会要求他/她确认他们是否真的希望第二次重新提交表单,这可能是一个更大的问题,而不仅仅是在表单上没有预先填写的值。我在这里猜测你的真正含义是什么,但如果你真的希望用户能够连续提交多个表格(重复性任务),那么只需在重定向后再次在下一页上渲染表单。