Эта тема на forum.dklab.ru


Дмитрий К.: Сессии+поддомены+?взлом?
Добрый день!
Подскажите пожалуйста корректный ответ, по докам и книгам не совсем понимаю:
Предположим, что необходимо юзать одну сессию.
1) Вызывать session_start() надо только на одной самой первой странице (например на index) или на каждой, где используется эта сессия?
2) Чтобы сессия сохранилась при переходе с myhost.ru на sub.myhost.ru, надо подарить этому поддомену куки с SID этой сессии (session_set_cookie_params())?
3) Если на 1 и 2 вопросы ответ "ДА", то выходит, что если я знаю структуру чужого $_SESSION, то я могу начать сессию на своем сайте, подарить чужому хосту куки с моим SID, и перейти по ссылке на этот сайт с успешным признаком авторизации в $_SESSION?
4) Есть разница в наследовании сессии своим поддоменом и чужим доменом?
5) Наследуется ли сессия при клике на <a href="javascript:history.go(+1)">?

Заранее благодарю за ответы.
Дмитрий Котеров:
Вызывать session_start() надо только на одной самой первой странице (например на index) или на каждой
На каждой. RTFM.

session_set_cookie_params())?
Скорее всего, да. Только я не уверен, в какую строну сохранится SID: от myhost.ru к sub.myhost.ru или наоборот. Экспериментируйте.

подарить чужому хосту куки с моим SID
Подарить чужому нельзя. Можно только своему поддомену (или наоборот - черт, не помню!).

Есть разница в наследовании сессии своим поддоменом и чужим доменом?
Есть, конечно. Почитайте теорию про куки в Интернете.

Наследуется ли сессия при клике на <a href="javascript:history.go(+1)">?
Должна, если куки при этом передаются.
Дмитрий К.:
На каждой. RTFM.
Просто в книжке смутила запись про то, что если вызвать session_start() снова, то сессия обнулится. Видимо имелось ввиду вызвать её в этом же сценарии. И 3 примера про сессии (про счётчик в разных окнах и по ссылке) тоже наводят на мысль, что вроде как session_start() можно и пропустить...

Подарить чужому нельзя
Вы имеете ввиду куки с SID или куки вообще? Спрашиваю, потому что на стр. 103 книги PHP5 в подлиннике написано: "...Так вот, оказывается, его (параметр domen) можно менять вручную, прописав здесь нужный адрес, и таким образом 'подарить' cookie другму хосту..."

Есть, конечно. Почитайте теорию про куки в Интернете.
Видимо я действительно не умею пользоваться поиском. Именно этот аспект работы кук так и не нешёл.:(

Спасибо за ответы! Книга - просто супер, с нуля очень хорошо понимается.
Дмитрий Котеров: опечатки php5
наводят на мысль, что вроде как session_start() можно и пропустить
Там в php.ini есть параметр, который автостартует сессию, но его лучше отключать. По крайней мере, так лучше переносимо между хостерами.

если вызвать session_start() снова, то сессия обнулится
По-моему, это неправда. Но я точно не уверен (только процентов на 95).

Вы имеете ввиду куки с SID или куки вообще?
Кукм с SID - это точно такие же "обычные" куки, как и все остальные. Чудес не бывает.

'подарить' cookie другму хосту...
Кажется, "дарить" можно только либо дочернему домену по отношению к текущему, либо, наоборот, родительскому. По-моему все же дочернему (т.е. более длинному). Не помню точно, надо проверять. Если в книге про это ничего не сказано, то это сюда: http://forum.dklab.ru/viewtopic.php?p=67336#67336
Дмитрий К.:
ОК, спасибо, нашёл здесь http://ru2.php.net/setcookie "To make the cookie available on all subdomains of example.com then you'd set it to '.example.com'."
Вообще мысль была сделать прозрачную авторизацию - чтобы, авторизовавшись на domen.ru быть авторизованным и на всех subs.domen.ru
Дмитрий К.:
Вообще мысль была сделать прозрачную авторизацию - чтобы, авторизовавшись на domen.ru быть авторизованным и на всех subs.domen.ru
Вот на этом форуме при подстановке 'www.' к forum.dklab.ru скрипт намекает, что мол идете, куда шли. Это сделано для того, чтобы не было проблем с autologin?
Я посмотрел на поведение сессии:
С site.ru на sub.site.ru данные сессии передаются.
С www.site.ru на sub.site.ru данные сессии не передаются.
С www.site.ru на www.sub.site.ru данные сессии не передаются.
В обратном направлении во всех трёх случаях данные сессии не передаются (это если сессия начата на дочернем адресе).

Вопрос: для прозрачной авторизации* нужно обязательно заставлять клиента стартовать сессию на site.ru, избавляясь при этом от www с помощью

if ($_SERVER['SERVER_NAME'] == "www.site.ru")
Header("Location: http://site.ru");

или можно как-то по-нормальному?

*Под прозрачной авторизацией я имею ввиду, чтоб зайдя на subs.site.ru, а с него на subs2.site.ru либо site.ru признак авторизации в СЕССИИ не пропадал.
WingedFox:
Дмитрий К.

Тут вопрос только в том, что сессия прописывается для поддомена "www".
Использовать www сейчас вообще нет никакой необходимости. Посетите, например, nowww.ru

Можете попробовать руками ставить куку с session_id для домена .site.ru
Дмитрий Котеров:
Это сделано для того, чтобы не было проблем с autologin?
Нет, просто www - это точно такая же часть доменного имени, как и все остальное. Вас же не удивляет, например, что abcd.forum.dklab.ru посылает куда подальше? Почему же тогда удивляет www.forum.dklab.ru?

Под прозрачной авторизацией я имею ввиду, чтоб зайдя на subs.site.ru, а с него на subs2.site.ru либо site.ru признак авторизации в СЕССИИ не пропадал
А так не получится сделать. Вот если Вы зайдете на site.ru, а потом с него - на subs.site.ru, вот тогда можно сделать, чтобы признак авторизации не пропадал.
Дмитрий К.:
Использовать www сейчас вообще нет никакой необходимости
Звучит странно, но БОЛЬШИНСТВО людей (обычных пользователей интернет) на мой вопрос, как бы они набрали адрес "site.ru" отвечают: "вэвэвэ точка сайт точка ру".
Видимо лучше подстраховаться этим:

if ($_SERVER['SERVER_NAME'] == "www.site.ru")
Header("Location: http://site.ru");

?
Нет, просто www - это точно такая же часть доменного имени, как и все остальное. Вас же не удивляет, например, что abcd.forum.dklab.ru посылает куда подальше? Почему же тогда удивляет http://www.forum.dklab.ru?
Нет, я просто хотел узнать, зачем посылает, а не отправляет например на forum.dklab.ru?
А так не получится сделать. Вот если Вы зайдете на site.ru, а потом с него - на subs.site.ru, вот тогда можно сделать, чтобы признак авторизации не пропадал.
Это я и хотел услышать!
Спасибо!
Дмитрий Котеров: nowww
я просто хотел узнать, зачем посылает, а не отправляет например на forum.dklab.ru?
Давайте так: почему "посылает" abcdef.forum.dklab.ru, более-менее понятно?
Вот потому же посылает и www.forum.dklab.ru

http://nowww.ru
однако nowww
Дмитрий К.:
Давайте так: почему "посылает" abcdef.forum.dklab.ru, более-менее понятно?
Вот потому же посылает и http://www.forum.dklab.ru
Ладно, ладно, этот вопрос действительно относится больше к проблеме "адаптация к стереотипам клиента", а не к PHP.
Спасибо за консультацию! И отдельное спасибо за http://nowww.ru

Вопрос решен, тему можно закрыть.

Эта тема на forum.dklab.ru