2013-08-04 79 views
0

我在我的數據庫上有一個「在線」字段的用戶表,它在用戶登錄時獲得值「1」,並在用戶註銷時變爲0。問題是,如果用戶關閉標籤並且不點擊「註銷」按鈕,他將永遠在線。如何在codeigniter會話過期時執行一個函數

所以我想掛鉤某種功能,所以當會話過期時,它將這個「在線」字段的值 - 在數據庫上 - 更改爲「0」。

我很樂於接受建議,因爲我不知道這是什麼方法。

+0

檢查我的答案,如果你需要更多的幫助,請告訴我。 –

+0

這有助於:http://stackoverflow.com/questions/4073311/detect-online-users –

回答

1

更改在線場到日期時間字段,

更新使用你的延伸,或使用鉤中央控制器來觸發每有一個請求時間字段的更新領域(你可以把會話驗證功能中的代碼,用於在觸發操作之前確保用戶已登錄)。

然後,您可以使用timediff SQL函數來查看用戶是否處於活動狀態。

0

您有特定的問題。但我對此有一個想法。

你可以去

系統/庫/ session.php文件

和更新功能function sess_destroy() - 線398

在此功能中,你可以改變數據庫的狀態,並以這種方式你總是會改變會話銷燬時的狀態。

如果使用unset_userdata(),則需要在同一文件上更改函數function unset_userdata($newdata = array()第481行。

2

您可以通過擴展CI_Session

創建內部應用程序/核心PHP文件做到這一點/ MY_Session.php

class MY_Session extends CI_Session 
{ 

public function __construct() { 
    parent::__construct(); 
} 

function sess_destroy() { 

    //update the Online filed as required 
    $this->CI->db->update('YOUR_TABLE', array('YOUR_DATA'), array('YOUR_CONDITION')); 

    //call the parent 
    parent::sess_destroy(); 
} 

}