《PHP服务端对用户表单数据验证失败后,后退返回时怎样保留用户原来所填的数据》要点:
本文介绍了PHP服务端对用户表单数据验证失败后,后退返回时怎样保留用户原来所填的数据,希望对您有用。如果有疑问,可以联系我们。
我们经常用到这种需要:
用户填写了表单并提交,结果到了服务端验证失败了,并返回到表单页,但此时用户原来填写的内容都丢失了,需要重新填。
这个时侯,你的体验会很糟,那么如何在返回后仍然保留你的数据呢?维易PHP对这个问题做了归纳:
方法一:使用Header设置Cache-control方法:
在接收数据的服务器端一开始地方,加上这行:
header('Cache-control: private, must-revalidate');
方法二:使用session_cache_limiter方法
在开启session_start()之前调用
session_cache_limiter('private, must-revalidate');
private,must-revalidate表示按了浏览器的后退或者地址栏的回车时,该页面不会重新向服务器请求,表单数据也就不会丢失了。
代码:
session_cache_limiter('private, must-revalidate'); session_start();
上面2种方法都是可行的,除了上传的数据,如图片等无法保留,其它都很好留在原表单。第一种比较省资源。
但是,实际应用上并不理想,原因在于后退的动作,一般服务器提示出错后,用javascript控制后退,这时会有2种方法:
history.go(-1);
或
history.back ();
这个在chrome执行的很完美,后退后数据得以保留(除了上传以外),但是,这两个后退脚本在IE和firefox下并不好用,数据并不会保留。
推荐以下几种方法,以便在所有浏览器通用:
1、使用cookie:当页面数据不太大时,可以考虑此方法。每个cookie的大小限制在4KB以内,一个网站的cookie数量限制在30-50个。
2、使用localStorage:把数据放进localStorage里面,然后后退回来时读取localStorage。
3、使用SESSION暂存:不推荐,耗资源
4、使用GET传递:可以考虑。
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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/49.html