Недавно я разработал веб-приложение с 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?
Вы можете использовать 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();
Посмотрите на это и посмотрите, поможет ли это.
Ну, я не знаю, было ли у вас уже решение, но я нашел себя в том же сценарии в 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;