Удалить сеанс для удаленного пользователя - Выйти удаленно в PHP - Codeigniter - PullRequest
0 голосов
/ 09 января 2019

Я использую базу данных для сохранения пользовательских сессий в codeigniter.

$sess_array = array('id' => $new_cus_id,
                    'cus_email' => $email);
$this->session->set_userdata('logged_in',$sess_array);

Config:

$config['sess_driver']          = 'database';  // select database driver
$config['sess_save_path']       = 'ci_sessions';  // name of the mysql table
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_match_ip']        = TRUE;
$config['sess_time_to_update']  = 300;
$config['sess_regenerate_destroy'] = TRUE;

В таблице базы данных есть id, ip_address, timestamp, data (blob). Как я могу найти данные сеанса конкретного пользователя и удалить их, чтобы сделать недействительным онлайн-сеанс.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

просто вы можете установить пользовательские данные сеанса с помощью $this->session->set_userdata('my_custom_session_data',true), и каждый раз, когда вы хотите проверить это, используйте if($this->session->userdata('my_custom_session_data') == true). или удалить его $this->session->unset_userdata('my_custom_session_data') или $this->session->userdata('my_custom_session_data','')

0 голосов
/ 09 января 2019

Грязная уловка, которая может вам помочь.

Вы можете найти сеансы, принадлежащие определенному электронному письму, выполнив что-то подобное в таблице сеансов

select id, ip_address, cast(data as char(1000)) datablob
from internal.ci_sessions
having datablob like '%email@domain.com%';

Вы можете встретить несколько записей, относящихся к предыдущим сеансам, вдоль текущего активного.

как только вы их нашли, просто удалите эти строки, и сеанс будет эффективно завершен, и пользователь будет вынужден повторно войти в систему

Имейте в виду: это не то, что вы должны делать часто. Использование таблицы сессий может привести к нежелательным последствиям, если вы коснетесь чего-то, чего не должны делать. Кроме того, если ваша таблица сеансов стала большой после многих месяцев / лет использования без периодического обслуживания, удаление одной или нескольких строк может вызвать временное снижение производительности, если таблица нуждается в повторной индексации. Не говори, что я тебя не предупреждал :)

Если это не то, что вам нужно сделать в экстренной ситуации, и вы можете потратить время на то, чтобы закодировать это, я предлагаю то, что я обычно делаю (да, необъективное предложение, я знаю :))

1.- добавить поле «принудительного выхода» из таблицы с информацией о пользователе.

По умолчанию это поле имеет значение "N" или что-то подобное. На каждом просмотре страницы (я делаю это на конструкции контроллера), запрашивайте таблицу пользователя для флага. Если возвращается «N», переходите к тому, к чему идет пользователь.

2.- выйти из системы, если есть флаг выхода

Если флаг возвращается как «Y», уничтожить сеанс пользователя и перенаправить пользователя на страницу входа. После этого (вы также можете сделать это после успешного входа в систему) не забудьте сбросить флаг на N, чтобы пользователь не мог войти в цикл выхода из системы.

Это добавляет один запрос к каждому просмотру страницы, но влияние должно быть незначительным

0 голосов
/ 09 января 2019

Аналогично настройке пользовательских данных в сеансе, вы можете сбросить их, используя следующий метод согласно документации codeigniter:

$sess_array = array('id' => $new_cus_id,
                'cus_email' => $email);

$this->session->unset_userdata($sess_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...