#1 liaojining
用smarty写一个表单,想提交后出现搜索结果后,可以按回退回到原来表单中,表单数据保留。
无奈试了
及其他办法,都是同样的结果
“网页过期”, 要按刷新才能得到表单,但表单数据全没了。
有什么办法解决此问题吗?先谢了
2010-03-15 13:31:34
#4 jake
用浏览器缓存从理论是可以的,不过很多时候都失效。
比较保险的做法是通过PHP把提交后的值再显示回给输入框内,不过这个做法会改变一下错误提示的流程。也就是说如果输入验证错误不会跳到另外一个错误页面,而是直接在输入的页面旁边显示错误信息。这样有个好处就是可以同时显示错误信息以及原来输入的内容。
具体可以参考
http://speedphp.com/bbs/thread-219-1-1.html winblog例子中的注册表单,在main控制器的register和active两个页面。注意:$this->remaininput = $this->spArgs();的使用
2010-03-15 13:54:22
#5 liaojining
为了保留登陆信息,我用了session_start()
2010-03-15 13:55:36
#6 jake
为了保留登陆信息,我用了session_start()
liaojining 发表于 2010-3-15 13:55 
SESSION和表单过期关系不大,或者可以试试header的方式来设置页面过期时间
2010-03-15 14:09:51
#7 liaojining
设置header方法已经试过了, ie都是同样的提示:网页过期, ff就提示重发数据
2010-03-15 18:08:31
#8 liaojining
让PHP支持页面回退的两种方法
在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。
第一,使用Header方法设置消息头Cache-control
header('Cache-control: private, must-revalidate'); //支持页面回跳
第二,使用session_cache_limiter方法
//注意要写在session_start方法之前
session_cache_limiter('private, must-revalidate');
PS:Cache-Control消息头域说明
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
郁闷,还是不行!从搜索结果页转到详细页,然后详细页回退结果页就网页过期。ie ff都要refresh才出来。
2010-03-15 20:08:29
#9 liaojining
onclick="javascript:history.go(-1);" 在firefox是可以回退的, ie还要reload一下。
2010-03-16 08:11:28