Как уничтожить сеанс с закрытием браузера в codeigniter

Недавно я разработал веб-приложение с codeigniter. Я плохо столкнулся с проблемой, связанной с сеансом.

Сценарий проблемы:

Если пользователь A зарегистрировался в приложении, то идентификатор пользователя устанавливается в сеансе. После выполнения задачи пользователь A закрыл свой браузер и покинул компьютер. Спустя некоторое время пользователь B пришел и открыл браузер и увидел, что приложение находится в состоянии входа в систему. или когда пользователь B записывает URL-адрес и нажимает его непосредственно перенаправлять в приложение без какой-либо проверки подлинности, используя предыдущий сеанс.

Для сеанса я использовал следующую конфигурацию:

$config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 1800; $config['sess_expire_on_close'] = FALSE; $config['sess_encrypt_cookie'] = FALSE; $config['sess_use_database'] = FALSE; $config['sess_table_name'] = 'ci_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = TRUE; $config['sess_time_to_update'] = 300; 

Теперь мой вопрос заключается в том, как я могу уничтожить все сеансы с закрытием браузера или вкладки браузера в codeigniter?

Related of "Как уничтожить сеанс с закрытием браузера в codeigniter"

Вы можете использовать javascript и асинхронный запрос. Когда вы закрываете окно, вызывается обработчик window.onunload

 var unloadHandler = function(e){ //here ajax request to close session }; window.unload = unloadHandler; 

Чтобы решить проблему перенаправления, php-сторона, вы можете использовать счетчик

  class someController extends Controller { public function methodWithRedirection(){ $this->session->set_userdata('isRedirection', 1); //here you can redirect } } class homeController extends Controller{ public function closeConnection(){ $this->load->library('session'); if($this->session->userdata('isRedirection')!== 1){ //destroy session } } } 

Отредактируйте файл config.php и установите для параметра sess_expire_on_close значение true .

например

 $config['sess_expire_on_close'] = TRUE; 

Добавьте кнопку выхода из системы.

Удалите эту кнопку с помощью встроенной функции уничтожения CI.

 $this->session->sess_destroy(); 

Посмотрите на это и посмотрите, поможет ли это.

https://github.com/EllisLab/CodeIgniter/wiki/PK-Session

Ну, я не знаю, было ли у вас уже решение, но я нашел себя в том же сценарии в CodeIgniter версии 3.0, в config.php , перейдите в раздел « Session Variables », и вы можете установить:

$ config ['sess_expiration'] = 0;

'sess_expiration '

 The number of SECONDS you want the session to last. Setting to 0 (zero) means expire when the browser is closed. 

Откройте общий файл конфигурации / config / config.php , найдите $ config [' sess_expiration ']

изменение

 $config['sess_expiration'] = 7200; 

в

 $config['sess_expiration'] = -1; 

для CI-3.0.4 найдите элементы ниже внутри «config.php» и установите соответственно

 $config['sess_expiration'] = -1; $config['sess_time_to_update'] = -1; 

в файле $ config.php

 change $config['sess_expiration'] = 7200; 

в

 $config['sess_expiration'] = 0;