Управление несколькими учетными записями в одном сеансе с несколькими открытыми вкладками

Сценарий:

У меня есть приложение-администратор, которое управляет учетными записями пользователей другого приложения. Теперь я хотел бы разместить пользовательскую ссылку (например, Click here to login with user1) в приложении-администрировании, позволяющем администратору напрямую входить в систему в отдельном окне или вкладке браузера (target="_blank").

Проблема:

Когда администратор щелкает две или более ссылок и открывает две вкладки с tab1=user1 и tab2=user2, последняя нажатая вкладка перезаписывает переменные сеанса всех других вкладок. Конечно... это то, как работают сессии, но мне интересно, есть ли способ позволить администратору управлять несколькими пользовательскими интерфейсами с одним сеансом на нескольких вкладках? Но я не вижу возможности идентифицировать конкретную вкладку в браузере, чтобы я мог сказать, что "в tab1 есть user1, а в tab2 есть user2, вошедший в систему...

Вопрос: Кто-нибудь делал что-то подобное и любит делиться основной идеей решения этой проблемы?


РЕДАКТИРОВАТЬ:

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

1 ответ

Решение

Как указывает ваше редактирование, способ сделать это с помощью переменной url, которая указывает, кем должен быть пользователь.

При таком подходе существует ряд проблем безопасности.

Я предполагаю, что ваша первоначальная ссылка выполняет какую-то проверку безопасности, чтобы убедиться, что первоначальный "вход" пользователя является авторизованным запросом. Вам нужно сделать аналогичную вещь для этого метода. Если ваш первоначальный запрос что-то вроде http://example.com/page.cfm?userid={id}&authtoken={encryptedtoken} Затем я бы поместил этот ИД пользователя в область действия сеанса в качестве действительного ИД пользователя, который может выдать администратор. Чем больше ссылок они нажимают, тем больше пользователей могут выдать себя. По последующим запросам вы проверяете запрошенный userid против разрешенного списка в сеансе и разрешить или запретить олицетворение.

Вам также необходимо обновить все ссылки на сайте, чтобы они включали в себя идентификатор пользователя. Самый простой способ сделать это - обмануть и использовать jQuery, чтобы переписать все внутренние URL с помощью userid прилагается. Вы бы условно включили этот javascript на основе вышеуказанной проверки.

Наконец, вы, вероятно, захотите предотвратить эти URL, которые включают userid от появления в поисковых системах, если это не полностью заблокированный сайт. Вам нужно будет либо использовать канонические URL, чтобы удалить useridили установите заголовки x-robots, чтобы поисковые системы не указывали URL-адреса, где userid был указан; или оба.

Это самый примитивный метод получения разных "сессий" для нескольких пользователей в одном браузере. Однако затем вы столкнетесь с проблемами, если будете использовать область видимости для чего-либо значимого, потому что каждая вкладка будет пытаться перезаписать другую. Вам нужно будет перезаписывать обычные переменные сеанса сайта при каждом запросе, или вам нужно будет создавать различные структуры в области сеанса для каждого используемого идентификатора пользователя. Насколько это серьезная проблема, зависит от вашего приложения.

Это выполнимая вещь, но, вероятно, гораздо больше работы, чем вы надеялись.

Другой вариант - заставить администраторов использовать Google Chrome с несколькими профилями, а также скопировать и вставить URL-адрес входа в разные окна профиля. Небольшое неудобство для них, но гораздо меньше работы для вас.

Другие вопросы по тегам