2011-03-20 16 views
4

我想在會話超時前5分鐘運行一個函數。我的會話超時設置爲7,200在我的配置文件中。 CodeIgniter可以做到這一點嗎?如何獲取CodeIgniter中的會話超時?

+0

提供更多的細節,很難說這裏到底需要什麼......你目前在做什麼?你的會議如何處理? – Jakub 2011-03-21 04:50:51

回答

10

我認爲你在尋找這樣的事情:

$lastActivity = $this->session->userdata('last_activity'); 

$timeOut = time() - 7200 + 300; // now minus the the session 
            // timeout plus 5 minutes 

if ($lastActivity <= $timeOut) 
{ 
    /* This runs on or after the "5 minutes before mark", but won't run if the 
     session has expired. After the session times out, based on the 
     $config['sess_expiration'] var, it's destroyed, as pointed out by 
     coolgeek. */ 

    // ... Do some stuff 
} 

你可能會想運行這個鉤子(see the hook docs here)的內部,使得它運行在每個頁面加載之前或控制器運行後,這取決於你想要做什麼。

+0

我不認爲這會工作......會話超時重置每個請求 – coolgeek 2011-03-20 14:51:19

+0

coolgeek:我假設他想要的事情發生,如果用戶在他們的會話過期前5分鐘積極使用該網站。上面的代碼將做到這一點。 '$ beforeTime'與現在相對,但是'$ lastActivity'是基於會話內容的靜態的。看過CodeIgniter源代碼後(在/system/libraries/Session.php中),我發現你說得對,因爲我的if子句的第二部分沒有意義。 – 2011-03-20 16:26:35

+0

謝謝! Gavin Anderegg,其實我正在開發一個購物門戶。我正在CodeIgniter中開發它。其實我想要!如果客戶處於待命狀態,我需要向我們網站的客戶展示「您將被註銷」。 – 2011-03-22 06:03:16

2

如果在超時期限內沒有請求(頁面命中),則會話超時。因此,一個php解決方案不會解決問題。

您需要在頁面中放置一個JavaScript計時器,該計時器將從請求頁面的時間開始倒計時,並在達到(超時 - 5分鐘)閾值後執行一些操作。