2010-08-05 4 views
4

Мы реализовали систему, аналогичную той, которая описана в этом other SO post. В принципе, если пользователь ничего не делает в течение 14 минут, мы предлагаем им выйти из системы. Если они нажмут на «держать меня вошедшим в систему», мы делаем запрос ajax, чтобы сохранить свою сессию в живых, иначе они будут перенаправлены на страницу выхода через минуту.Автоматический выход с несколькими вкладками открыт

Он работает очень хорошо, и он встроен в аналогичные системы, используемые на сайтах, таких как mint.com и bankofamerica.com. Единственная проблема заключается в том, что пользователи нашего приложения имеют тенденцию иметь несколько вкладок, открытых для обращения к другим частям данных. Поэтому проблема заключается в том, что они могут активно работать на одной вкладке, но затем другая вкладка выйдет из строя и выйдет из системы. Это вызывает внезапный тайм-аут сеанса для пользователя, когда они этого не ожидали. Кстати, у mint.com есть такая же проблема.

Так что мне было интересно, есть ли у кого-нибудь идеи по борьбе с этим?

У меня есть одна идея, каждый запрос может установить cookie «последнего активного времени». После автоматического выхода из системы сервер может проверить это последнее активное время и, если он относительно недавно, не выходить из системы. Разумеется, ручной отход будет игнорировать этот файл cookie, поэтому, если пользователь хочет выйти из системы, он может сделать это в любое время. Тем не менее, я боюсь, что это может подвергнуть какой-то угрозе безопасности, которую я сейчас не вижу. Мысли?

+0

Я знаю, что давно это было опубликовано, однако просто натолкнулся на это и подумал: если у пользователя открыто несколько экземпляров, а 14 минут закончились, всплывающее окно будет отображаться во всех случаях , Вы могли в это время проверять каждые x секунд (за одну минуту до того, как пользователь будет подписан), если они уже нажали «сохранить меня вошедшим в систему» ​​(также лучше всего через ajax). Проблема, которую я вижу, если вы просто проверяете в последний раз активную, заключается в том, что, как только всплывающие окна отображаются, и пользователь уволит ее на одной вкладке, они все равно будут выходить через минуту из-за ссылки на выход из другой вкладки. – Chris

+0

Просто добавьте еще один шаг, @Chris: проверьте сервер, чтобы увидеть, были ли они повторно загружены до выхода из системы. Выйдите из системы, если они этого не сделали. – vbullinger

ответ

2

Прежде чем показывать всплывающее окно, спросите сервер, как давно пользователь выполнил свой последний запрос.

+0

В настоящее время мы не сохраняем последнее время запроса ... хотя, возможно, если мы инвертируем проблему. Если мы установим этот файл cookie для каждого запроса, а затем, как вы предлагаете, просто проверьте его, прежде чем показывать диалог тайм-аута. Таким образом, мы не добавляем какой-либо код на сервер как таковой. Интересно, вы думаете, что это может работать и быть в безопасности? –

+1

Если злоумышленник может читать файлы cookie, у него уже есть доступ к файлу cookie для проверки подлинности, и он находится в системе. Таким образом, этот файл cookie не делает его менее безопасным. – Sjoerd

Смежные вопросы