本文章向碼農們介紹php 表單提交錯誤後返回數據消失問題的解決方法,感興趣的碼農可以參考一下。 表單提交錯誤後返回數據消失怎麼辦吶,今天就來分析解決一下這個問題。 狀況概述: 做填寫表單信息提交的時候會碰到一個問題就是當用戶填寫並提交表單後,程式判斷不符合要求並返回,返回之後之前填寫的表單信息會被清 ...
本文章向碼農們介紹php 表單提交錯誤後返回數據消失問題的解決方法,感興趣的碼農可以參考一下。
表單提交錯誤後返回數據消失怎麼辦吶,今天就來分析解決一下這個問題。
狀況概述:
做填寫表單信息提交的時候會碰到一個問題就是當用戶填寫並提交表單後,程式判斷不符合要求並返回,返回之後之前填寫的表單信息會被清空了的情況。如果填寫的信息量少還無所謂,如果填寫的信息量比較多,這會直接打擊到填寫信息的人的良好心情。因此解決表單提交錯誤返回後填寫的內容消失的問題是一個提高用戶體驗度的迫在眉睫的問題。
對於這種問題,綜合總結了大概有下麵幾種情況:
(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網站,可記住了。
原文地址:http://www.manongjc.com/article/600.html
相關閱讀:
php 實現接收多個name相同但Value不相同表單數據實例