2013-08-04 2 views
0

Я получил таблицу пользователей в моей базе данных с полем «Интернет», после чего пользователь получает логин и получает значение «0» при выходе пользователя из системы. Проблема в том, что если пользователь закрывает вкладку и не нажимает кнопку «Выход», он остается в сети навсегда.Как выполнить функцию при завершении сеанса codeigniter

Таким образом, я хотел бы подключить какую-то функцию, поэтому, когда сессия истекает, она меняет значение этого поля «Онлайн» - в базе данных - на «0».

Я, конечно, открыт для предложений, потому что я не являюсь правильным выбором для этого.

+0

Проверьте мой ответ, если вам нужна дополнительная помощь, просто скажите мне. –

+0

Это поможет: http://stackoverflow.com/questions/4073311/detect-online-users –

ответ

1

Изменения онлайн поля в поле даты и времени,

Update поле с помощью центрального контроллера вы простирающийся от, или использовать крюк, чтобы вызвать обновление поля каждый раз, когда есть запрос (Вы можете поставить кода в функции проверки сеанса, которую вы используете, чтобы убедиться, что пользователь выполнил вход в систему до запуска действий).

Затем вы можете использовать функцию 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(); 
} 

} 
Смежные вопросы