Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Cookies в поддомене www


Автор: Stampede 12.5.2005, 19:54
Допустим, у меня есть вебсайт, mysite.com

Когда юзеры заходят, я создаю у них кукисы, чтобы значить, было видно, кто есть ху. Беда, однако, в том, что некоторые посетители попадают на сайт по адресу www.mysite.com. Это мне активно не нравится, потому что возникает проблема: если потом этот же человек заходит (например, по другой ссылке) по правильному адрему, без www, то ранее установленные кукисы оказываются бесполезными.

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

Я вообще не знал об этой проблеме, пока не обнаружил из логов, что иногда имеет место быть такой сценарий: юзер делает пост, сервлет обрабатывает данные из формы и делает sendRedirect(nextpage). А по незнанию nextpage у меня был не в виде URL, а в виде путя от корня. А браузер, оказывается, пытается восполнить недостающие элементы путем добавления http://www.mysite.com.

Я тогда стал при формировании адреса для перенаправления в явном виде приписывать http://mysite.com, но тогда люди, изначально попавшие через www, стали терять куки.

И что делать? Мне видятся два принципиальных подхода:
  • Всех, кто попал через www, сразу без разговоров переадресовывать на правильный адрес.
  • Отслеживать кто как попал, и перенаправлять соответственно.
Первый решает проблему с наименьшими затратами душевных сил, по принципу раз сделал и забыл, но несет налет авторитарирности. Кроме того, непонятно, как к этому отнесутся поисковики.

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

Какие у кого будут мнения?

Автор: Stampede 18.5.2005, 18:15
Просьба к модераторам:

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

Спасибо.

Автор: batigoal 18.5.2005, 18:19
Есть специальный раздел по веб-технологиям:
http://forum.vingrad.ru/index.php?showforum=18

Автор: Stampede 18.5.2005, 18:23
Цитата(Lamer @ 18.5.2005, 18:19)
Есть специальный раздел по веб-технологиям


Я знаю, но он какой-то совсем вялый. Поэтому прошу перенести именно в PHP. Впрочем, на усмотрение модераторов.

Автор: IZ@TOP 18.5.2005, 19:46
Stampede, понял вопрос. Есть несколько способов (очевидных для меня):
1 - Устанавливать кукисы для разных доменов.
Можно к примеру создать функция которая будет устанавливать переданные ей значения сразу на все домены.
2 - Редиректить с www.example.com на example.com, или наоборот - зависит от предпочтений (я бы предпочел с example.com на www.example.com).

Пока вроде других решений в голову не приходит.

Автор: Opik 18.5.2005, 19:47
Бегом читать ман:
http://ee.php.net/setcookie
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
Пример 1. setcookie() send example

Код

<?php
$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
?>  

Добавлено @ 19:47
IZ@TOP
всё проще smile

Автор: IZ@TOP 18.5.2005, 20:36
Opr, я догадывался ^)

Автор: Stampede 18.5.2005, 20:47
Цитата(Opr @ 18.5.2005, 19:47)
всё проще


Да, действительно, все оказалось гораздо проще smile

Меня в свое время сбило с толку то, что при явном указании домена неочевидно, что действие куки будет распространяться и на поддомены. Так же как не явствует это из RFC 2109 (особенно если не знать правил, по которым согласно спецификации осуществляется сопоставление доменных имен):

Цитата
Domain=domain
      Optional.  The Domain attribute specifies the domain for which the
      cookie is valid.  An explicitly specified domain must always start
      with a dot.


Ну все, теперь надеюсь побороть smile Спасибо, Opr.

IZ@TOP, будь добр, как модератор влепи товарищу плюса от моего имени, а то мне пока статуса не хватвет smile

Автор: batigoal 18.5.2005, 20:57
Я влеплю - мне тоже интересно было smile

Автор: MuToGeN 30.5.2005, 15:34
Было что-то на тему domain.com и .domain.com, второе устанавливает для всех субдоменов домена domain.com
А вот насчет установки вообще для всех существующих в инете доменов? Кто-нить сталкивался с ситуациями типа установки кукисов например для всех .com ?

Автор: Mal Hack 30.5.2005, 16:40
Цитата(MuToGeN @ 30.5.2005, 16:34)
Было что-то на тему domain.com и .domain.com, второе устанавливает для всех субдоменов домена domain.com

На сколько я помню, таая фишка тоже не везде работает.

Цитата(MuToGeN @ 30.5.2005, 16:34)
А вот насчет установки вообще для всех существующих в инете доменов? Кто-нить сталкивался с ситуациями типа установки кукисов например для всех .com ?

Этого быть не может, иначе бы я легко переписал бы куки, или считал бы не то, что надо.

Автор: Natasha 8.8.2006, 16:54
Цитата
Opik
Код

<?php
$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
?>  



Это я в мануале читала, но видимо не очень поняла

Цитата

domain=DOMAIN_NAME - домен, для которого значение cookie действительно. Например, "domain=cit-forum.com". В этом случае значение cookie будет действительно и для домена cit-forum.com, и для www.cit-forum.com. Но не радуйтесь, указания двух последних периодов доменных имен хватает только для доменов иерархии "COM", "EDU", "NET", "ORG", "GOV", "MIL" и "INT". Для обсуждаемых сейчас новых семи доменов первого уровня ("FIRM", "SHOP", "WEB", "ARTS", "REC", "INFO", "NOM"), вероятно, это условие сохранится. Для доменов иерархии "RU", например, придется указывать три периода. 


А как быть с именами .ru?

например www.имя_сайта.ru и имя_сайта.ru

Автор: rMaveric 10.8.2006, 22:27
Сталкивался с сесиями на несколько собственных доменов, а точнее

mydomain.com и mydomain.org

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)