表单提交错误后返回内容消失问题的解决方法(PHP网站)


Posted in PHP onOctober 20, 2015

表单提交错误后返回内容消失怎么办呐,今天就来分析解决一下这个问题。

状况概述:

做填写表单信息提交的时候会碰到一个问题就是当用户填写并提交表单后,程序判断不符合要求并返回,返回之后之前填写的表单信息会被清空了的情况。如果填写的信息量少还无所谓,如果填写的信息量比较多,这会直接打击到填写信息的人的良好心情。因此解决表单提交错误返回后填写的内容消失的问题是一个提高用户体验度的迫在眉睫的问题。
对于这种问题,综合总结了大概有下面几种情况:
(1)页面使用了session_start函数,这个函数有个特点就是会强制当前页面不被刷新,解决方法就是在此函数后加上下面这段代码:

header("Cache-control:private");//注意在本行之前你的PHP程序不能有任何输出

还有其他的几种解决方法是在session_start前加上

session_cache_limiter('nocache'); //清空表单 
session_cache_limiter('private'); //不清空表单,只在session生效期间 
session_cache_limiter('public'); //不清空表单,如同没使用session一般

上面的设置session会使seesion出现缓存的现象,从而导致当你应用到session的地方会出现session信息不能更新的问题,鉴于这个原因,本文提出下面几种其他的解决办法。
 (2)使用Header方法设置消息头Cache-control,在页面加入下段代码:
header('Cache-control: private, must-revalidate');  //支持页面回跳,注意本行之前不能有任何输出
(3)使用session_cache_limiter方法,在页面加入下段代码:
session_cache_limiter('private, must-revalidate'); //注意要写在session_start方法之前
下面对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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

读完这篇文章大家再遇到类似问题就可以彻底解决了,特别提醒的是这个解决方法仅针对php网站,可记住了。

PHP 相关文章推荐
PHP return语句另类用法不止是在函数中
Sep 17 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
Oct 24 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
jQuery+php简单实现全选删除的方法
Nov 28 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP操作Redis常用命令的实例详解
Dec 23 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 #PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 #PHP
php限制文件下载速度的代码
Oct 20 #PHP
php获取远程文件大小
Oct 20 #PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 #PHP
php生成验证码函数
Oct 20 #PHP
php文件上传你必须知道的几点
Oct 20 #PHP
You might like
php xfocus防注入资料
2008/04/27 PHP
PHP Cookie学习笔记
2016/08/23 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
Django组件cookie与session的具体使用
2019/06/05 Python
Python 文件数据读写的具体实现
2020/01/24 Python
如何使用repr调试python程序
2020/02/28 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
保护环境倡议书范文
2014/05/13 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
快递员岗位职责
2014/09/12 职场文书
房租涨价通知
2015/04/23 职场文书
公司的力量观后感
2015/06/05 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
Python基础知识学习之类的继承
2021/05/31 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫