當(dāng)前位置:博客首頁>>PHP >> 閱讀正文

【PHP】session_start()導(dǎo)致go(-1)返回時不保存表單的解決

作者: 鄭曉 分類: PHP 發(fā)布于: 2012-12-07 07:19 瀏覽:8,428 評論(2)


這是前幾天遇到的一個問題,有人反映說在填寫完表單提交時,由于某個表單項可能填寫的不合法,導(dǎo)致提交失敗,返回表單頁面。但返回后所有的表單都被清空了,重新填寫比較麻煩,所以讓我給解決一下。

本來我感覺修改成保存表單內(nèi)容是比較簡單的,把所有表單的value=””里放上這個變量就可以了,類似這樣的:<input type=”text” name=”username” value=”{tpl:$username}” /> {tpl:}是我們用的模板變量。修改后經(jīng)測試發(fā)現(xiàn)只有谷歌瀏覽器在頁面返回后能保存住表單信息,其它瀏覽器返回后還是一片空白!

度娘解釋說,是由于每個頁面都調(diào)用了session_start()的原因,在js返回上一頁時,不能保存住表單信息。
解決辦法是:在公共初始化文件的session_start()之后加入一句:
header(‘cache-control:private,must_revalidate’);

或:

session_cache_limiter(‘private’);

加入上面這個header后,當(dāng)表單再次提交失敗返回時,頁面將正常的保存住所有填寫的表單信息,包括input、select等,當(dāng)然也可以解決在返回頁面時提示“頁面已過期”的警告。

原理:正常的在返回上一頁時,我們?yōu)g覽器訪問的是緩存的頁面,而如果腳本中使用了session_start()函數(shù)后,腳本會強制讓瀏覽器不緩存頁面,瀏覽器會重新訪問服務(wù)器刷新頁面,so,當(dāng)點擊返回,或使用go(-1)方式向上跳轉(zhuǎn)時會提示頁面已過期、表單內(nèi)容被清空的現(xiàn)象。

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://www.yjfs.org.cn/php-session_start-form.html

【PHP】session_start()導(dǎo)致go(-1)返回時不保存表單的解決:目前有2 條留言

用戶評論頭像 3D背景墻發(fā)表于 2013年09月11日 14:59[回復(fù)]

我只是看看 沒什么想說的

用戶評論頭像 個人博客發(fā)表于 2012年12月07日 19:59[回復(fù)]

沒遇到這種情況。以后要注意。

發(fā)表評論

change vcode