Один и тот же sessionid во всех открытых окнах? - PullRequest
1 голос
/ 15 февраля 2012

Возможно ли, чтобы один и тот же сеанс был активным в нескольких открытых окнах в приложении php?

Я хочу получить НЕКОТОРЫЕ из удобства ужасной системы типов флажков «запомнить меня» без такого же количества риска для данных пользователя.

Конкретный вариант использования, с которым я столкнулся, заключается в следующем: когда пользователь получает «запрос на добавление в друзья», ему отправляется электронное письмо со ссылкой, содержащей случайный хэш и его имя пользователя в URL. Скажем, человек уже вошел в мою службу в одном окне и проверяет свою почту для подтверждения по электронной почте в другом. Они нажимают на ссылку в электронном письме с подтверждением, и оно запускает третье окно, которое инициирует запрос GET на соответствующую страницу подтверждения. Я хотел бы сделать так, чтобы, если пользователь уже вошел в службу в другом окне и хэш и имя пользователя совпадают с теми, которые хранятся в таблице «запросов» моей базы данных, щелчок по ссылке мгновенно подтверждает друга. Однако, если они еще не вошли в другое окно, они вынуждены войти в систему, чтобы подтвердить запрос на добавление в друзья.

В настоящее время, если человек вошел в другое окно, при щелчке по ссылке откроется третье окно, и человек должен снова войти в систему независимо от того, есть ли у него еще один открытый сеанс.

Возможна ли эта функция без использования файлов cookie для поддержания постоянного входа в систему?

Обновление: Этот вопрос демонстрирует мое отсутствие понимания того, как работают сессии. Сеанс пользователя обычно сохраняется по умолчанию при одновременном открытии окон браузера. Проблема, как было решено в ответе, который я принял, состояла в том, что у меня было открыто одно окно с www.example.com в качестве URL-адреса и одно с example.com в качестве URL-адреса, и в этом случае во втором окне создается другой сеанс чем продолжение сеанса, начатого в первом окне.

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Если вы используете сеансы на основе файлов cookie, сеанс уже поддерживается между окнами (того же исполняемого файла браузера).

В этом случае идентификатор сеанса является единственным сохраненным токеном на стороне клиента, и браузеры неКак правило, файлы cookie не разделяются между разными окнами.

У вас может быть проблема в том, что они посещают ваш веб-сайт через два разных доменных имени (www.example.com против example.com против www.example.org или тому подобное).), но в принципе проблем не возникает, если вы не попытаетесь использовать переданные GET идентификаторы сеанса.

Технически вы будете "использовать файлы cookie" - но файлы cookie содержат только идентификатор сеанса, а не содержимое сеанса .Если это анафема для вас, вы можете сохранить идентификатор сеанса с помощью HTML5 LocalData API, или с помощью объекта Flash, или Java-апплета, или чего-то еще ...

Я настоятельно рекомендую не пытаться идентифицировать клиентов a posteriori через их IP-адрес или характеристики браузера.Просто пусть они хранят токен и используют его, чтобы определить, кто они.

0 голосов
/ 15 февраля 2012

Типичная система входа в систему имеет сессии и куки. Файлы cookie устанавливаются только в том случае, если пользователи хотят, чтобы их запомнили, чтобы избежать повторного ввода данных из этого специального браузера и ничего больше. Сеанс активен, пока вы входите в систему, но после закрытия окна он будет уничтожен, и вам будет предложено снова войти в систему. При сохранении файлов cookie в браузере пользователей важно зашифровать их данные. Кроме того, вместо пароля сохраните файл cookie с номером (ID), а не их паролем.

...