在IE上,當用戶點擊返回按鈕時,他們得到的經典IE「網頁已過期」消息。即後退按鈕上的「網頁已過期」PHP會話問題
我發現在我的php.ini中設置以下內容已經解決了這個問題。
'session.cache_limiter=private'
但是我現在的問題是,當我發送的形式包括我在一個隱藏字段一個PHP會話值($ _SESSION [「令牌」])。然後我檢查了這下頁,看是否標記值匹配
echo "<form ......<input type='hidden' name='token' value='".$_SESSION['token']."' />";
/*on recieving page*/
if($_POST['token']==$_SESSION['token']){/*ok matched*/}
else{/*THIS IS WHERE THE ERROR OCCURS*/}
我的問題是,因爲增加這些設置,以我的php.ini文件我發送表單時注意到我讓我的自定義頁面錯誤如因某種原因$ _SESSION ['token']值在接收表單數據的頁面上發生變化,從而使if()語句返回false?它現在在所有瀏覽器中都發生了嗎?這個是我的$ _SESSION ['token']代碼(注意,當發送我的表單時,它落在else()中,但$ _SESSION ['token']的值更改可能不會保留我的$ _SESSION值?
session_start()
if(!isset($_SESSION['token']))
{
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token; /*have to put current session token into this variable for hidden field in <form>*/
$_SESSION['token_time'] = time();
}
else
{
/*if token set ie user press back button on browser*/
$token_age = time() - $_SESSION['token_time'];
if ($token_age > 1200)
{
/* More than 20 minutes has passed - regenerate. Do this so more likely wont timeout when user taking long time on <form> and token may not get refreshed before time limit*/
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token; /*have to put current session token into this variable for hidden field in <form>*/
$_SESSION['token_time'] = time();
}
}
如果任何使用我的繼承人其他的php.ini會話設置
session.cache_limiter=private
session.cookie_secure=1 ;my wholes site is SSL
session.cookie_httponly=1
session.save_path = /tmp ;directory to store sessions
session.save_handler = files
session.cookie_lifetime = 0 ;persistence cookie dies after browser closed
session.use_trans_sid = 0
session.use_only_cookies=1
讓我清楚的東西了的傢伙,是使用「session.cache_limiter發生此整個問題的原因=私有'。如果我把它拿出來,除非我在IE中收到消息時纔會遇到問題在表單頁面上顯示「網頁已過期」的後退按鈕。是否有任何建議如何避免在點擊後退按鈕時出現在IE中的消息?
觀察你的$ token_age怎麼樣? – 2011-06-02 11:22:10
是的,但我沒有進入,如果()。就在else()中。 \t 它與該設置有關session.cache_limiter =私人作爲沒有它它的作品,但我在IE瀏覽器中獲得「網頁過期消息」,如果我把它拿出來。我錯過了一些我認爲緩存似乎在每個頁面上被刪除的東西。與session.cache_expire有什麼關係我想? – daza166 2011-06-02 11:46:12
您是否檢查過HTTP標頭? – 2011-06-02 11:48:04