当前位置:博客首页>>PHP >> 阅读正文

【PHP】session_start()导致go(-1)返回时不保存表单的解决

作者: 郑晓 分类: PHP 发布于: 2012-12-07 07:19 浏览(6,300) 评论(2)


这是前几天遇到的一个问题,有人反映说在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面。但返回后所有的表单都被清空了,重新填写比较麻烦,所以让我给解决一下。

本来我感觉修改成保存表单内容是比较简单的,把所有表单的value=””里放上这个变量就可以了,类似这样的:<input type=”text” name=”username” value=”{tpl:$username}” /> {tpl:}是我们用的模板变量。修改后经测试发现只有谷歌浏览器在页面返回后能保存住表单信息,其它浏览器返回后还是一片空白!

度娘解释说,是由于每个页面都调用了session_start()的原因,在js返回上一页时,不能保存住表单信息。
解决办法是:在公共初始化文件的session_start()之后加入一句:
header(‘cache-control:private,must_revalidate’);

或:

session_cache_limiter(‘private’);

加入上面这个header后,当表单再次提交失败返回时,页面将正常的保存住所有填写的表单信息,包括input、select等,当然也可以解决在返回页面时提示“页面已过期”的警告。

原理:正常的在返回上一页时,我们浏览器访问的是缓存的页面,而如果脚本中使用了session_start()函数后,脚本会强制让浏览器不缓存页面,浏览器会重新访问服务器刷新页面,so,当点击返回,或使用go(-1)方式向上跳转时会提示页面已过期、表单内容被清空的现象。

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/php-session_start-form.html

【PHP】session_start()导致go(-1)返回时不保存表单的解决:目前有2 条留言

用户评论头像 3D背景墙发表于 2013年09月11日 14:59[回复]

我只是看看 没什么想说的

用户评论头像 个人博客发表于 2012年12月07日 19:59[回复]

没遇到这种情况。以后要注意。