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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值