《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并不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括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消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/49.html