history.back返回后数据丢失的解决办法
2018-02-08 17:34
387 查看
js使用history.back返回表单数据丢失的主要原因就是使用了session_start();的原因,该函数会强制当前页面不被缓存。
解决办法如下:
在你的 Session_start 函数后加入 header(“Cache-control: private”); 注意在本行之前你的PHP程序不能有任何输出。
还有基于session的解决方法,在session_start前加上
session_cache_limiter(‘nocache’);// 清空表单
session_cache_limiter(‘private’); //不清空表单,只在session生效期间
session_cache_limiter(‘public’); //不清空表单,如同没使用session一般
session_cache_limiter(private,must-revalidate)是什么意思
表义一:
指定会话页面所使用的缓冲控制方法:
当session_cache_limiter(‘private’)时,用处是让表单history.go(-1)的时候,填写内容不丢失!就避免页面失效的警告!
表义二:
这个会话与header(‘cache-control:private,must_revalidate’);效果相同
但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;
支持页面回跳详解,session_cache_limiter()的使用详解
现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:
1.使用session_cache_limiter方法:
session_cache_limiter(‘private,must-revalidate’);
但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;
2.用header来设置控制缓存的方法:
在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。
第一,使用Header方法设置消息头Cache-control
引用:
header(‘Cache-control: private, must-revalidate’);//支持页面回跳
第二,使用session_cache_limiter方法
引用:
//注意要写在session_start方法之前
session_cache_limiter(‘private, must-revalidate’);
补充:
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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
关于表单刷新
问:为什么我在点击浏览器的后退按钮后,所有字段的信息都被清空了?
答:这是由于你在你的表单提交页面中使用了 session_start 函数。该函数会强制当前页面不被缓存。解决办法为,在你的 Session_start 函数后加入 header(双引号Cache-control: private双引号); 注意在本行之前你的PHP程序不能有任何输出。
补充:还有基于session的解决方法,在session_start前加上
引用:
session_cache_limiter(‘nocache’);// 清空表单
session_cache_limiter(‘private’); //不清空表单,只在session生效期间
session_cache_limiter(‘public’); //不清空表单,如同没使用session一般
可以在session_start();前加上 session_cache_limiter(‘private,max-age=10800’);
解决办法如下:
在你的 Session_start 函数后加入 header(“Cache-control: private”); 注意在本行之前你的PHP程序不能有任何输出。
还有基于session的解决方法,在session_start前加上
session_cache_limiter(‘nocache’);// 清空表单
session_cache_limiter(‘private’); //不清空表单,只在session生效期间
session_cache_limiter(‘public’); //不清空表单,如同没使用session一般
session_cache_limiter(private,must-revalidate)是什么意思
表义一:
指定会话页面所使用的缓冲控制方法:
当session_cache_limiter(‘private’)时,用处是让表单history.go(-1)的时候,填写内容不丢失!就避免页面失效的警告!
表义二:
这个会话与header(‘cache-control:private,must_revalidate’);效果相同
但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;
支持页面回跳详解,session_cache_limiter()的使用详解
现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:
1.使用session_cache_limiter方法:
session_cache_limiter(‘private,must-revalidate’);
但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;
2.用header来设置控制缓存的方法:
在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。
第一,使用Header方法设置消息头Cache-control
引用:
header(‘Cache-control: private, must-revalidate’);//支持页面回跳
第二,使用session_cache_limiter方法
引用:
//注意要写在session_start方法之前
session_cache_limiter(‘private, must-revalidate’);
补充:
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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
关于表单刷新
问:为什么我在点击浏览器的后退按钮后,所有字段的信息都被清空了?
答:这是由于你在你的表单提交页面中使用了 session_start 函数。该函数会强制当前页面不被缓存。解决办法为,在你的 Session_start 函数后加入 header(双引号Cache-control: private双引号); 注意在本行之前你的PHP程序不能有任何输出。
补充:还有基于session的解决方法,在session_start前加上
引用:
session_cache_limiter(‘nocache’);// 清空表单
session_cache_limiter(‘private’); //不清空表单,只在session生效期间
session_cache_limiter(‘public’); //不清空表单,如同没使用session一般
可以在session_start();前加上 session_cache_limiter(‘private,max-age=10800’);
相关文章推荐
- history.back返回后数据丢失的解决办法
- php history.back返回后表单数据丢失的解决办法
- php history.back返回后表单数据丢失的解决办法
- js 页面history.back()返回上一页,ios 不重新加载ready的解决办法
- js 页面history.back()返回上一页,ios 不重新加载ready的解决办法
- Excel大批量导入内存溢出,多线程SAX读取方式解决,及页面返回数据响应超时解决办法
- QFS损坏,数据文件丢失的解决办法。
- 使用jsonp有数据返回,但是success不执行的解决办法
- Excel导入SQL Server数据丢失的解决办法
- session_start()导致history.go(-1)返回时无法保存表单数据的解决方法
- Android 多个 AppWidget PendingIntent 传送数据丢失解决办法
- C# 模拟post数据提交时 出现如下错误: System.Net.WebException: 远程服务器返回错误: (417) Expectation Failed 的解决办法
- Silverlight在调用wcf时传输数据过大返回Not Found的解决办法
- 使用history.back()出现"警告: 网页已过期的解决办法"
- chrome不支持jqgrid表格按返回数据顺序显示的解决办法
- STM32F103ZE单片机FSMC接口读取NAND Flash芯片K9F1G08U0E的数据时出现数据丢失的解决办法
- 用struts2开发的App后台,返回json数据中文为问号的解决办法
- jqGrid翻页时数据选中丢失问题的解决办法
- dede表单提交出现“数据校验不对,程序返回”的解决办法 dede_fields value值
- php开源框架分享之php开发中histroy.back(-1)丢失表单数据解决方法