【PHP】session_start()導(dǎo)致go(-1)返回時(shí)不保存表單的解決
作者: 鄭曉 分類: PHP 發(fā)布于: 2012-12-07 07:19 瀏覽:8,512 評(píng)論(2)
這是前幾天遇到的一個(gè)問(wèn)題,有人反映說(shuō)在填寫(xiě)完表單提交時(shí),由于某個(gè)表單項(xiàng)可能填寫(xiě)的不合法,導(dǎo)致提交失敗,返回表單頁(yè)面。但返回后所有的表單都被清空了,重新填寫(xiě)比較麻煩,所以讓我給解決一下。
本來(lái)我感覺(jué)修改成保存表單內(nèi)容是比較簡(jiǎn)單的,把所有表單的value=””里放上這個(gè)變量就可以了,類似這樣的:<input type=”text” name=”username” value=”{tpl:$username}” /> {tpl:}是我們用的模板變量。修改后經(jīng)測(cè)試發(fā)現(xiàn)只有谷歌瀏覽器在頁(yè)面返回后能保存住表單信息,其它瀏覽器返回后還是一片空白!
度娘解釋說(shuō),是由于每個(gè)頁(yè)面都調(diào)用了session_start()的原因,在js返回上一頁(yè)時(shí),不能保存住表單信息。
解決辦法是:在公共初始化文件的session_start()之后加入一句:
header(‘cache-control:private,must_revalidate’);
或:
session_cache_limiter(‘private’);
加入上面這個(gè)header后,當(dāng)表單再次提交失敗返回時(shí),頁(yè)面將正常的保存住所有填寫(xiě)的表單信息,包括input、select等,當(dāng)然也可以解決在返回頁(yè)面時(shí)提示“頁(yè)面已過(guò)期”的警告。
原理:正常的在返回上一頁(yè)時(shí),我們?yōu)g覽器訪問(wèn)的是緩存的頁(yè)面,而如果腳本中使用了session_start()函數(shù)后,腳本會(huì)強(qiáng)制讓瀏覽器不緩存頁(yè)面,瀏覽器會(huì)重新訪問(wèn)服務(wù)器刷新頁(yè)面,so,當(dāng)點(diǎn)擊返回,或使用go(-1)方式向上跳轉(zhuǎn)時(shí)會(huì)提示頁(yè)面已過(guò)期、表單內(nèi)容被清空的現(xiàn)象。
本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/php-session_start-form.html
我只是看看 沒(méi)什么想說(shuō)的