Передача PHPSESSID между доменом и поддоменами

Гриша К.

Новичок
Передача PHPSESSID между доменом и поддоменами

Здравствуйте.

Запускается сессия на домене _http://domain.ru/,
переменная сеанса передается на все поддомены этого домена ($_COOKIE['PHPSESSID']).
Обратно, с поддомена на домен PHPSESSID не передается.
PHP:
# Попробовал сделать так, но без результатно:
session_set_cookie_params(0, '/', '.domain.ru');
PHP:
# Попробовал установить cookie-набор вручную на поддомене, 
# в таком случае PHSESSID сохраняетcя,
# и получается что сохраняется между поддомен <=> домен:
if(!isset($_REQUEST[session_name()]))
{
	session_start();
	setcookie('PHPSESSID', session_id(), 0, '/', '.domain');
}
При использование setcookie() (http://ru.php.net/manual/ru/function.setcookie.php),
cookie-набор сохраняется на клиентской машине?
Непосредственно создавая cookie-набор на поддомене в интернете, я необнаружил данного набора на своем компьютере.
Могут ли параметры setcookie() (время жизни 0 - до закрытия браузера и путь '/'), повлиять на то будет ли сохранен cookie-набор на клиентской машине или может быть что он будет сохранен на хостинге, как переменная сеанса?
Можно ли использовать описанный выше метод, безопасен ли он, и возможно это делается подругому?

На локальной машине, PHPSESSID не передается на поддомен (установлен как АЛИАС) никаким способом,
при указании параметра domain = '.domain' (название хоста) в функции setcookie(), cookie-набор для хоста domain не отображается, незнаете ли в чем причина?
 

Фанат

oncle terrible
Команда форума
и получается что сохраняется между поддомен <=> домен:
ты гонишь.
cookie-набор сохраняется на клиентской машине?
а у тебя есть другие версии?
Непосредственно создавая cookie-набор на поддомене в интернете, я не обнаружил данного набора на своем компьютере.
и правильно сделал. это совершенно нормальное поведение браузера
Могут ли параметры setcookie() (время жизни 0 - до закрытия браузера и путь '/'), повлиять на то будет ли сохранен cookie-набор на клиентской машине
параметры вообще - могут. такие параметры - нет.
но, это тебе все равно не нужно, поскольку
Можно ли использовать описанный выше метод
нет, поскольку он не будет работаать с поддомена на домен, а только наоборот.
возможно это делается по другому?
с поддомена - только по ссылке. причём, ссылка дописывается, разумеется, руками.
На локальной машине, PHPSESSID не передается на поддомен
про локальную машину вообще забудь. Во всяком случае - с интернет эксплорером.

-~{}~ 24.01.07 23:46:

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

Гриша К.

Новичок
Фанат, спасибо за ответ.

Первый день работаю с cookie-наборами, могу и ошибаться.

Но у меня вс же получается сохранить PHPSESSID и передать его с поддомена домену.

Зайдите пожалуйста на http://vertebral-column.com/demo.php
- здесь просто print_r($_COOKIE['PHPSESSID'])

Затем зайдите на поддомен http://blog.vertebral-column.com/demo.php
- на нем запускается сессия и сохраняется cookie набор для домена

А потом вернитесь на домен и скажите пожалуйста почему в данном случае PHPSESSID передается, я навернека что-то делаю нетак и что-то недопонимаю, подскажите пожалуйста где ошибка.

а у тебя есть другие версии?
Версия: на время сессии PHPSESSID сохраняется на хостинге

и правильно сделал. это совершенно нормальное поведение браузера
Тогда получается, что cookie-наборы не сохраняются на компьютере пользователя, а хранятся на хостинге до закрытия браузера?

параметры вообще - могут. такие параметры - нет.
Какие параметры?
 

Гриша К.

Новичок
Фанат, спасибо за ответ.

Решил попробовать на другом хостинге:
http://koloshino.ru/demo.php
+ Разные броузеры, OPERA, NETSCAPE 7.0 (Mazilla 5.0) - аж 2002 года.
Все работает.

Если действительно это правильно,
то наверное получается, что при создании setcookie('PHPSESSID', session_id(), 0, '/', '.domain'); на поддомене, при указании в качестве параметра domain = основного домена,
броузер сохраняет куку для домена, а на поддомене используятся та кука, которая была создана на нем,
но так как оба PHSESSID одинаковые, то получается,
что это спосбом при котором например можно авторизоваться на поддомене, сохранять авторизацию на домене и наоборот.

Раз пока это нельзя опровергнуть, буду использовать.
Рад что работает.
 

Фанат

oncle terrible
Команда форума
Попробовал установить cookie-набор
непонятны только две вещи.
почему ты упорно величаешь куки какими-то наборами, и почему не хочешь прописывать домен в настройках сессий, а ставишь лишнюю куку
 

Гриша К.

Новичок
Фанат

почему ты упорно величаешь куки какими-то наборами
Первый день работаю с cookie-наборами, могу и ошибаться.
Как в книге написано (Разработка web-приложений с помощью php и mysql. Люк Веллинг, Лора Томсон), так и называю.


почему не хочешь прописывать домен в настройках сессий, а ставишь лишнюю куку
Вы имеете в виду: ini_set("session.cookie_domain", ".vertebral-column.com"); ?

Вот попробуйте сами: http://blog.vertebral-column.com/demo.php
Наверное действительно механизм именно такой как я описал выше
Кука в тему
 

Гриша К.

Новичок
alexhemp, спасибо за ответ.
Не совсем понял, ответ к моему собщению или нет,
если к моему, то хорошо, значит я действительно правильно уяснил этот момент.
 

Фанат

oncle terrible
Команда форума

Гриша К.

Новичок
Фанат,
по поводу cookie-наборов я понял, что вы не имеет в виду что это некорректное название, а просто в смсыле общения на форуме так проще.
Ну вообще например навзание "кука-набор" веселое )

Я попробовал конечно же, PHPSESSID с поддомена не пердается, потому что наверное действительно механизм именно такой как я описал выше.
Ссылку я привел, просто чтобы вы тоже смогли посмотреть.

Кроме ini_set() я могу предположить, что вы имеете в виду еще session_set_cookie_params(0, '/', '.domain.ru');,
но с ним как я уже писал выше не получится.

Всетаки выходит, что кука не лишняя
 

Фанат

oncle terrible
Команда форума
я имею в виду, что у этой книги был переводчик-идиот.
и повторять за ним не надо.

с session_set_cookie_params убедись ещё раз.
в частности - проверь заголовок, который посылает сервер
 

Гриша К.

Новичок
Фанат,
попробовал еще раз, используя session_set_cookie_params(0, '/', '.domain'); для соответсвующего домена и поддомена - PHPSESSID с поддомена на домен не передается:
http://blog.vertebral-column.com/demo.php

Вывел http-заголовки, при помощи apache_request_headers():
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: ru
Connection: close
Cookie: PHPSESSID=971d7707b7dadf92423195110ad07e58
Host: blog.vertebral-column.com
If-Modified-Since: Thu, 25 Jan 2007 03:17:09 GMT; length=4279
Referer: http://vertebral-column.com/demo.php
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
X-Real-IP: ****
 

Фанат

oncle terrible
Команда форума
Cookie: PHPSESSID=971d7707b7dadf92423195110ad07e58
это - что?
это называется "не передается"?
и при чем здесь apache_request_headers? при чем здесь вообще куки, посылаемые браузером? тебя интересует, что сервер ставит

-~{}~ 25.01.07 11:46:

пришлось самому смотреть. не пишет домен. оч.странно.

блин, а почему на основном домене сессию не стартуешь?
 

Гриша К.

Новичок
Фанат, спасибо за ответ.

Данные заголовки я просто выели на поддомене, после старта сессии, ну повидимому я сдела не то, что порекомендовали вы.

в частности - проверь заголовок, который посылает сервер
Я понял это так, что нужно посмотреть заголовки,
ну думаю как их посмотреть, почитал тут http://phpfaq.ru/na_tanke, нашел там соответсвующую функцию.
А скажите пожалуйста, что вы имели ввиду.

При старте сессии на основном домене, проблем никаких, даже домен для куки прописывать ненадо (в мануале я читал, что прописывать домен рекомендуется для совместимости).
На моем сайте структура устроена так (конечно ее можно поменять, но я решил выбрать такой варианта, в случае обеспечения единой авторизации), что пользователь может авторизоваться и на домене и на поддомене.

При таком же вопросе, в другом месте, мне посоветовали использовать ini_set( 'session.cookie_domain', '.domain.ru' );
на главном домене, на нем же инициализировать сессию, а в поддоменах просто стартовать сессию и все.

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

Андрейка

Senior pomidor developer
Гриша К.
уважаемый Григорий, дело в том, что старт кукие-наборов на основном домене ничем не отличается от старта кукие-наборов на дополнительном домене.. есть даже предположение, что домены главными не бывают
поэтому попробуйте с помощью некоторых технико-программных средств посмотреть кукие-наборы, отправляемые по каналам передачи данных, сервером так называемого главного домена на ваш апаратнопрограммный комплекс (возможно проще всего это сделать используя бесплатное приложение с открытым исходным кодом - огненныйлис и плагин огненнаяошибка)
 

Гриша К.

Новичок
С уважением, Андрейка, не поянял вас.

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

Андрейка

Senior pomidor developer
я предполагаю, что у вас всеж допущена ошибка и предлагаю посмотреть кукие-наборы, отправляемые в вашу сторону с сервера как с дополнительного домена, так и с главного
 

Гриша К.

Новичок
Андрейка, спасибо за ответ.
А как вы можете предложить это посмотреть?
У меня у самого есть некоторые сомнения, всетаки когда Фанат написал что такого не может быть, и несмотря на то что посмотрев пример, не опровергнул его, я начил думать об ошибке, старался выполнить все его рекомендации, но работает же все.

И посмотрите пожалуста пример, с приведением содержания скрипта:
http://blog.vertebral-column.com/demo.php - стартуем сессию на поддомене
http://vertebral-column.com/demo.php - переходим на домен
 

Андрейка

Senior pomidor developer
Soderzhimoe $_COOKIE['PHPSESSID']: 4a11ca6af64905a3afb28202013bb78d - переходим на домен

а вообще - если, вы не заметили, session_start ставит кукие-набор сама без setcookie.. а еще в мануале русским языком написано когда надо использовать сессион_сет_кукие_набор_парамс.. извольте перечитать
 
Сверху