浏览器点击返回按钮时丢失表单数据

10

当我在任何浏览器上点击“返回”时,我会失去在表单中输入的所有数据,包括下拉列表和文本输入类型。

这是服务器问题、浏览器问题还是编码问题?

谢谢


在ASP.NET中将检索数据,所以我猜你没有使用ASP.NET? - Natrium
这也发生在Windows Phone浏览器中。正在尝试寻找解决方案。 - live-love
3个回答

9

这是一个浏览器问题。当点击后退按钮时,浏览器的行为会有所不同——这种行为大多取决于用户隐私设置。此外,大多数浏览器在访问HTTPS连接的页面时,无论其HTTP连接的正常行为如何,都会自动重置表单。此外,许多依赖于AJAX的HTML表单不能正确或一致地恢复其先前的状态。

编辑 ----

既然你提到使用PHP和MySQL,假设你也在使用会话...当你点击后退按钮时,浏览器将不会预填充表单。使用PHP会话的页面不会被缓存到浏览器中,点击后退按钮返回上一页就像从头开始打开该页面一样——大多数浏览器不会恢复表单值。


我发现Safari会保留数据,但IE和FF不会。 - Oliver Bayes-Shelton
我们正在正确使用会话,所以实际上没有办法解决这个问题,除非浏览器停止允许用户点击返回按钮。 - Oliver Bayes-Shelton
我们能否利用会话来获得优势? - Oliver Bayes-Shelton
试着查看session_cache_limiter的可能值,网址是:http://us2.php.net/manual/en/function.session-cache-limiter.php,并尝试为您的应用程序使用一个不那么激进的设置。如果我是你,我会使用递归页面并通过代码恢复表单数据。 - Salman A
我会说...将 private_no_expire 设置为OK。 - Salman A

3

这适用于PHP和IE8。

不仅必须将缓存设置为私有,而且必须删除4个缓存头,而这只能使用PHP 5.3完成。

在PHP 5.2中,如果使用Zend框架的setHeader()方法,则只能将4个头文件设置为空白值。由于某种原因,在IE8上将4个头文件值设置为空值是不足够的。这是PHP 5.3的代码:

header_remove("Expires"); 
header_remove("Cache-Control"); 
header_remove("Pragma"); 
header_remove("Last-Modified"); 

1

您需要为浏览器创建粘性表单,以便在按下返回按钮时保留表单数据。这很容易做到,请查看链接中的教程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接