CodeIgniter: хранение сессий в БД, как узнать, кто из них пришел? - PullRequest
0 голосов
/ 02 июля 2011

Я думаю о сохранении сеансов CI в базе данных, чтобы я мог показать, сколько пользователей в данный момент онлайн, кто конкретно онлайн и т. Д.насколько я понимаю, что информация будет храниться в столбце user_data таблицы ci_session?То есть, может быть, я просто храню там идентификатор пользователя?

Ответы [ 2 ]

6 голосов
/ 02 июля 2011

CodeIgniter сохранит данные в таблице, которую вы указали в своем конфигурационном файле.По умолчанию это ci_session.Информация о сеансе, например, доступная через $_SESSION, сериализуется и сохраняется в столбце с именем user_data.Это поле не сможет сообщить вам, истек ли сеанс (или, другими словами, сколько человек в сети).

Вместо этого вы можете использовать столбец last_activity, которыйотметка времени последнего сеанса.Вы можете запустить SQL-запрос, который выбирает счетчик session_id, где last_activity меньше, чем 2 минуты назад.

SELECT COUNT(`session_id`) AS `active_user_count` FROM `ci_session` WHERE `last_activity` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MINUTE)

При этом существующий сеанс не обязательно означает, что пользователь"вошел в систему".Если вам нужно проверить, что они вошли в систему, вы можете использовать оператор LIKE, чтобы добавить условие в оператор WHERE, который проверяет, вошел ли пользователь в систему. Это будет зависеть от того, какое имя переменной вы используетепоэтому взгляните на свои данные и посмотрите, сможете ли вы их выяснить.

Например:

SELECT COUNT(`session_id`) AS `active_user_count` FROM `ci_session` WHERE `last_activity` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MINUTE) AND `user_data` LIKE '%s:9:"logged_in";b:1;%'
3 голосов
/ 16 ноября 2012

Это работает! используйте это

    $session = $this->db->get('ci_sessions')->result_array();
    foreach ($session as $sessions) {
        $sessio = $sessions['last_activity'] + 7200;
        echo $sessio . "time";
        echo now();
        echo "||";
        $custom_data = $this->session->_unserialize($sessions['user_data']);

        if (is_array($custom_data)) {
            foreach ($custom_data as $key => $val) {
                $user[$key] = $val;
            }
        }
    }
    print_r($user);
    exit();`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...