Тайм-аут сеанса на нескольких вкладках - PullRequest
0 голосов
/ 01 апреля 2011

Я использую Spring acegi security для единого входа в несколько приложений.Мне нужно увеличить время ожидания сеанса на стороне клиента, если пользователь тоже что-то пишет в браузере.Если пользователь открыл несколько сеансов или браузеров, то мне нужно учитывать активный сеанс на всех сеансах, которые он открыл.Если он активен, то я не должен выходить из него, даже если он не активен в других сеансах.Пожалуйста, предложите мне любые идеи, как отслеживать и знать на стороне клиента тоже.

Любая идея очень ценится.Спасибо.

Запущенное приложение app1 на двух вкладках скажет tab1 и tab2. Время ожидания составляет 10 минут.Поэтому мы реализовали функционал тайм-аута в java-скрипте, который находится на стороне клиента.Этот код выдает окно подтверждения через 10 минут.Если пользователь говорит продолжить, мы расширяем сессию, запуская живой URL.Это работает, если приложение работает в одной вкладке.То же самое приложение app1 открыть в нескольких вкладках скажем tab1, tab2.Здесь приложение app1 открывается в двух вкладках, но в одной сессии.Мы работаем с приложением, которое открывается в tab2, и не используем applciation в tab1.Таким образом, приложение в tab1 неактивно в течение 10 минут. Затем приложение в tab1 дает поле подтверждения, и мы не отвечаем на то, что поле подтверждения tab2 сделает приложение для выхода.Так каково решение не делать выход из системы, так как мы работаем с приложением на Tab2.Есть идеи?Как отследить, активно ли приложение в других вкладках?

Ответы [ 3 ]

1 голос
/ 03 апреля 2011

Это не прямой ответ.(Поскольку я не думаю, что для этого есть решение)

, вы можете попытаться запустить пиксель (*) между приложением, и тем самым продлить время сеанса.
Допустим, у вас есть:
app1, app2, app3

пользователь вошел в app1 и app2 и работает только с app1.если вы запускаете пиксель из его браузера в app2 при каждом http-запросе, который он сделал в app1, он полагает, что он также активен в приложении 2.
Я думаю, что если вы запускаете пиксель каждые 2 минуты между приложениями app1,2 и3 вы можете сохранить сеанс вживую между приложениями.

Я сделал этот твик в PHP-приложении, это не так просто, но выполнимо.

* пиксель - это скрытый http-запрос, который запускает скрипт на стороне сервера.может сделать это через ajax, img, script src = "", iframe и другие.

0 голосов
/ 08 июня 2011

Модифицированный код в javascript для запуска ajax-запроса к серверу и поиска последней активности. Если последняя активность менее 10 минут, то выход из системы отсутствует.

0 голосов
/ 03 апреля 2011

Самое простое - связать сеанс входа в систему с общим доменом.Допустим, у вас есть app1.domain.com, app2.domain.com, app3.domain.com, НО у вас есть SSO на domain.com, и все они совместно используют этот файл cookie сеанса.Это всего лишь вопрос настройки домена в файле cookie сеанса - я полагаю, вы можете сделать это в конфигурации.В любом случае, это довольно легко сделать, поэтому, если это работает с вашей проблемой, сделайте это.(Может быть, есть какой-то хитрый способ сделать это без иерархии доменов, но я не уверен, что это такое.)

Если это невозможно, вам может понадобиться другой способ хранения сеансов.Моей первой мыслью было бы поместить сеансы в базу данных.С их помощью вы можете синхронизировать и централизованно управлять таймаутами.Это может потребовать немного пользовательского кода - но это не должно быть так много.

Не уверен, что это применимо, но я написал свои мысли о реализации тайм-аута также на стороне клиента .

...