Идентификатор сеанса в пределах одного окна

программирование php .net веб

Предложите, пожалуйста, Ваш вариант реализации следующего:

для веб-приложения (пусть это будет сайт на php, не суть важно) необходимо сделать так, чтобы на стороне сервера каждое открытое окно и происходящее в нём было связано с одним и тем же номером сеанса. При этом важно, чтобы номер сеанса у всех открытых окон был разный и жил ровно столько времени, сколько открыто окно.

Временные куки, похоже, не годятся - в разных окнах браузера они одинаковые.

Примечание:
Нужно, чтобы номер сеанса сохранялся, если в этом же окне мы переходим по ссылке и она открывается в этом же окне.

Примечание:
2 NetRain:
Значения скрытых полей в ссылку не передаются. Руками дописывать к каждой ссылке - удовольствие ниже среднего, кроме того, такая ссылка, переданая другому пользователю, может нарушить безопасность и даже может послужить причиной того, что в разных окнах окажется один и тот же идентификатор сеанса.
HTTP_REFERER - решение было идеальным, если бы сцобака IE его не резал в некоторых случаях (собственно, сейчас трекинг у меня сделан на HTTP_REFERER, но это не всегда хорошо работает в IE, я бы сказал, что не работает вообще).

Примечание:
2 stopkran:

Я подразумеваю под "сеансом" работу внутри отдельного окна. Даже если один и тот же юзер работает в разных окнах одного браузера, сеансы в них должны быть разные. Это нужно для того, чтобы можно было выполнить трекинг его действий, а также корректную работу с формами. (Например, когда юзер заходит на страницу редактирования, значения полей читаются из БД. В последующем, когда он просто обновляет эту страницу, то данные из БД не читаются, а остаются прежними. Обновлять страницу редактирования могут и интерактивные компоненты, при этом нужно, чтобы уже изменённые поля из БД не читались заново.)

Момент с Http-авторизацией интересен - распишите, плз, поподробнее. Не хотелось бы постоянно запрашивать у юзера пароль и логин.

Примечание:
2 Ильдар-:
А как сохранить значение этой переменной при переходе по ссылке в этом же окне ?

Примечание:
2 stopkran:
>> Если пользователь откроет страницу редактирования в двух разных окнах, http-авторизация будет одна и та же (она всё-таки привязана к странице или папке сервера, а не к окну браузера).
Тогда от кукисов это мало чем отличается -> не подходит в данном случае, так как мне надо идентифицировать окно.

Примечание:
Похоже на то, что среди предложенных вариантов остаётся только window.name. Посмотрю в эту сторону, хотя опять же непонятно как PHP-скрипт будет определять в каком окне он открыт.

Примечание:
Проблему я (временно) решил принудительной передачей HTTP_REFERER в IE путём эмуляции нажатия ссылки ((( Будет работать до поры до времени. Однако проблема с сессией в окне достаточно актуальна, так как ни одно из предложенных решений я не могу считать изящным и простым. Хотя если припрёт, буду делать что-то похожее на предложенное stopkran и Ильдар-.

Всем спасибо.
Ответы:
Принципиально, используя HTTP_REFERER и скрытые поля, значения которых будут передаваться в каждой ссылке, при каждом запросе на сервер, можно организовать такое. При HTTP_REFERER'е, не содержащем нашего домена/адреса, генерируем некий идентификатор, который потом и таскаем везде. Если идентификатор передан - определяем по нему сессию и работаем с ней, если нет - генерируем новый.
> Значения скрытых полей в ссылку не передаются. Руками дописывать к каждой ссылке - удовольствие ниже среднего
Конечно сами не передаются, а дописывать долго и удовольствия никакого. Можно в конце страницы просто добавить JS, который при загрузки пофиксил бы ссылки и добавил бы туда значение из этого скрытого поля.
output_add_rewrite_var() - как вариант не добавлять переменные к каждой ссылке.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.