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

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

Проблемный сценарий:

Если пользователь 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?

 Ariful Islam01 нояб. 2012 г., 10:48
@ AlexRichards нет, я не храню сессии в БД.
 Ariful Islam01 нояб. 2012 г., 10:40
это нет работа. Есть ли другое решение?
 ajtrichards01 нояб. 2012 г., 10:46
Вы храните сессии в БД?
 air4x01 нояб. 2012 г., 10:37
Попробуйте установить.$config['sess_expire_on_close'] = TRUE;Sessions - Вызывать ли сеанс автоматически истекающим при закрытии окна браузера.

Ответы на вопрос(8)

в$ config.php файл

change  $config['sess_expiration'] = 7200;

в

$config['sess_expiration'] = 0;

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

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

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

менять

$config['sess_expiration'] = 7200;

в

$config['sess_expiration'] = -1;

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

Пусть эта кнопка уничтожит сессию с КИвстроенная функция уничтожения.

$this->session->sess_destroy();
 Sharky19 сент. 2014 г., 08:58
это самый вменяемый подход. все же дети рамок хотят, чтобы все было сделано автоматически. тот'почему фреймворки не должны использоваться новичками.
Решение Вопроса

Вы можете использовать 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
         }
      }
   }  
 Ariful Islam01 нояб. 2012 г., 11:28
да, это решение, но одна проблема с перенаправлением страницы сеанса очищена, а затем приложение исчезло.
 artragis01 нояб. 2012 г., 11:33
Так что используйте встречную сторону php. И когда счетчик равен 0, тогда вы уничтожаете сеанс.
 artragis01 нояб. 2012 г., 11:39
Я редактирую свой ответ, чтобы показать вам, что я имею в виду

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

$ Конфиг [»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.
 CodeGodie18 мар. 2016 г., 19:25
Я понял, но что, если вы хотите, чтобы ваш сеанс истекал в разных сценариях? Например, истечь сеанс через один час или когда браузер закрывается. Как вы справляетесь с этим?
 Jim Pannell26 авг. 2015 г., 11:33
Это неу меня не работает в CI 3.0.

Изменитьconfig.php файл и наборsess_expire_on_close кtrue

например

$config['sess_expire_on_close'] = TRUE;
 Mr.Web22 июл. 2014 г., 00:05
Работал для меня!
 jned2927 окт. 2014 г., 10:51
не работает в моей программе

Ваш ответ на вопрос