Как очистить сессию на браузере закрыть? - PullRequest
8 голосов
/ 30 марта 2012

Я использую «devise» для аутентификации по паролю в своем приложении ruby ​​on rails. После успешного входа в систему, закрытия браузера и открытия нового окна браузера, я все еще вошел в систему. Допустим, я использую Chrome, закрываю все экземпляры Chrome и затем открываю новый. Я все еще вошел в систему. То же самое относится и к IE, и к Firefox.

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

Я пытался щелкнуть по кнопке выхода из системы в событии onbeforeunload окна браузера, но он не работает, поскольку он выходит из приложения при отправке любой формы или нажатии ссылки.

window.onbeforeunload = function() {
  $('#logout_cls').click();
};

и попытался отправить AJAX запрос на уничтожение сессии для контроллера сессий.

  jQuery(window).bind(
    "close",
    function(event) {
          $.ajax({
            type: 'DELETE',
            dataType: 'json',
            url: $('#logout_cls').attr('href')
          });
    });

но все это не сработало.

Ответы [ 2 ]

6 голосов
/ 01 апреля 2012

Оказывается, проблема была в том, как был настроен мой session_store.

MyApp::Application.config.session_store :active_record_store, 
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours}

Я удалил опции, и проблема была решена.есть ли у него потенциальные риски?Я не храню никаких важных данных в сеансе, очевидно, но вставляю данные, которые я не хотел бы раскрывать.

Мое приложение будет запущено через несколько дней, и было бы очень полезно получить ответ на этот вопрос.Я гуглил вещи в течение часа или около того, но мне не повезло.

Спасибо

2 голосов
/ 30 марта 2012

Это на самом деле особенность.Facebook и почти все сайты с аутентификацией делают это с помощью куки.

Опция Devise Rememberable «управляет созданием и очисткой токена для запоминания пользователя из сохраненного куки».Если вы не хотите этого, то удалите строку remember_token и remember_created_at datetime из вашей пользовательской модели и удалите кнопку Remember Me со своей страницы входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...