PHP服务端对用户表单数据验证失败后,后退返回时怎样保留用户原来所填的数据

《PHP服务端对用户表单数据验证失败后,后退返回时怎样保留用户原来所填的数据》要点:
本文介绍了PHP服务端对用户表单数据验证失败后,后退返回时怎样保留用户原来所填的数据,希望对您有用。如果有疑问,可以联系我们。

相关主题: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指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。