2011-08-22 78 views
1

已經有幾個在計算器這樣的問題,但沒有回答非常雄辯地:)檢查會話使用Ajax請求尚未過期

我希望能夠顯示登錄提示,當用戶離開其計算機持續20分鐘,並允許會話超時。

  1. 一個簡單的「等待20分鐘,然後顯示提示」不會工作,因爲用戶可能已在另一個選項卡上的網站上處於活動狀態。
  2. 向服務器發送標準ajax請求,以檢查會話是否仍處於活動狀態將基本保持用戶登錄狀態,因此不會執行任何操作。

有沒有辦法使ajax請求不會繼承當前會話標識的服務器? (爲了避免2點發生)

感謝

回答

0

一個標準的AJAX請求到服務器,以檢查是否會話仍處於活動狀態將基本上保持用戶登錄,這樣不會做任何。

如果會話20分鐘後到期,做檢查21分鐘後:)

有沒有一種方法,使一個Ajax請求,這並不繼承當前會話標識的服務器? (以避免點2發生)

假設您使用cookie,沒有辦法向服務器發送沒有cookie的請求。但是,您可以將Web服務器或框架配置爲不針對特定請求/路徑考慮Cookie會話,然後檢查會話有效性而不刷新它。

+0

'然而,您可以配置您的網絡服務器或框架以不考慮Cookie會話 - 當IIS管理會話時,會怎麼做? – Jimbo

0

有趣的問題。我相信解決方案將在於會話活動由服務器端處理的方式。

如果您爲會話提供了一個活動監視機制,比如說一個「$ last_active」變量監視最後一次請求的時間,並在對服務器發出請求時進行更新,反之,如果一定的時間已過,這將有助於保持活力,無論PHP/APACHE提供的自動功能如何。

然後你可以使用一個條件語句,比如說如果你在你的url中包含一個「?querylogin = 1」,你可以讓你的服務器端腳本檢查那個GET變量的存在,然後給出一個響應AJAX請求,而不更新「$ last_active」變量,我想應該這樣做

2

爲什麼你不運行ajax調用只有當用戶在網站上啓動一個動作來執行他們沒有的?當允許用戶第一次來到這法子網頁,你可以設置一個會話變量用PHP例如:

$_SESSION['active'] = true;

當原始會話過期時,該變量將不再可用。然後,當需要檢查會話是否已過期(取決於用戶的操作)時,可以向服務器發送請求並根據會話變量是否設置來驗證當前會話狀態。