2009-06-17 103 views
0

可能重複:
Automatically re-direct a user when session Times out or goes idle…PHP會話過期重定向

我有一個登錄系統和會話過期,但他們需要刷新頁面再次顯示在屏幕上登錄。相反,我的用戶輸入數據並點擊提交以確定他們已被註銷。

一旦會話過期,有沒有辦法讓頁面自動重定向到登錄頁面?

謝謝!

編輯:::

從審查之前問的問題,發現Here我已經使用了公認的答案這種應用。謝謝大家的建議。

+0

可能的重複:http://stackoverflow.com/questions/1003001/automatically-re-direct-a-user-when-session-times-out-or-goes-idle – Gumbo 2009-06-17 17:57:32

+0

你說得對,它是一個重複,謝謝。 – 2009-06-17 17:58:21

+0

我可以幫助您解決問題,但首先我需要知道會話是否必須在一段時間後過期,或者只要用戶在頁面上或至少處於活動狀態就可以保持活動狀態。 – 2009-06-17 18:01:06

回答

0

那麼,最好是用戶使用表單發送的數據暫時保存,用戶有機會再次登錄,然後重定向到他來自的頁面,已經填充了舊數據。必須輸入兩次數據(或者如果你處於某種事情的中間,讓頁面本身重定向一段時間)是相當煩人的。

如果您想要重定向而不在頁面上保留輸入的數據,您至少應該向用戶顯示他已離開多少時間,直到頁面過期。使用JavaScript應該是一個很好的選擇。

0

您可以使用JavaScript來定期檢查會話是否過期,然後重定向(如果有)。實現取決於您的身份驗證系統的詳細信息,但基本上涉及將會話的到期時間傳遞到頁面,然後比較到期時間和當前時間,直到會話過期。

編輯:實例

我用的prototype.js,因此如果你使用一些其他的框架(或只是原始JS),你將不得不去適應它。

<input type="hidden" id="expiration" value="<?php echo(time() + SESSION_TTL) ?>" />

<script type="text/javascript"> 
    new PeriodicalExecuter(function(pe) { 
    if(getTime() >= parseInt($('expiration'))) { 
     window.location = "http://session.expired.com" 
    } 
    } 
</script> 

應該做沿着你想要的東西線。

1

您可以使用meta-refresh標籤,例如, 10分鐘後重定向:

<meta http-equiv="refresh" content="600;url=http://example.com/" /> 

這不是處理會話到期,特別是對於您所標明的使用情況非常用戶友好的方式。

一個更好的技術是通過拾取keypress和mousemove事件來跟蹤用戶使用Javascript的活動。每一分鐘,如果有一些活動,請發出一個XMLHttpRequest來保持會話的活躍。

說你的會話在10分鐘後過期,這個JS在那個時候注意到沒有用戶活動,它可以在你的頁面的橫幅內提醒用戶他們的會話已經過期並提供重新建立會話的方式等。

這樣,執行數據輸入或(不管表格是爲了什麼)的人如果花時間不會丟失會話,並且如果他們離開辦公桌午餐時不會重定向!

1

PHP函數ini_get可用於在創建頁面時讀取會話生存期。
JavaScript可用於在會話過期後執行重定向。

// javascript 
var logout = function() { 
    //redirect code 
}; 
setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>); 
0

我也僱傭了Javascript解決方案。我們的登錄頁面破壞了會話,所以我們有一個計時器,在每次頁面加載時重置爲零。如果該計時器到期,它會重定向到登錄頁面,從而破壞會話。