Проблема с PHP cookie - www или без www - PullRequest
13 голосов
/ 27 февраля 2010

Почему, если я создаю cookie на www.example.com и проверю его на example.com, cookie там не существует? Я планирую просто использовать .htaccess перенаправить не-www на домен www. Но как мне это решить?

Ответы [ 4 ]

32 голосов
/ 27 февраля 2010

Основными виновниками здесь являются браузеры, а не PHP. Они хранятся по доменам и не знают, что www - особый случай; с их точки зрения, www.mydomain.com и mydomain.com являются разными строками и поэтому имеют разные политики безопасности. Однако есть кое-что, что вы можете сделать.

При настройке файла cookie используйте .mydomain.com (с начальной точкой). Это скажет браузеру вашего пользователя сделать куки доступными для mydomain.com и всех поддоменов, включая www. PHP setcookie имеет аргумент $domain, но он пятый в списке, поэтому вам может потребоваться установить $expire и $path в их значения по умолчанию, чтобы получить его.

setcookie('name', 'value', time()+3600, '/', '.mydomain.com');

Однако для обеспечения согласованности вы можете рассмотреть возможность перенаправления всего веб-трафика на конкретный домен, т. Е. Отправить mydomain.com трафик на www.mydomain.com или наоборот. Мои смутные знания о SEO (редактировать, если они неправильные) говорят мне, что это полезно, чтобы не иметь дублирующегося контента, и избавляет вас от всех подобных проблем с аутентификацией. Кроме того, если вы храните ресурсы на поддомене, наличие файлов cookie замедляет трафик, так как приходится каждый раз переносить его, поэтому хранение файлов cookie приложения только на www дает вам этот прирост скорости.

Вот учебник о том, как выполнить такое перенаправление в Apache.

1 голос
/ 27 февраля 2010
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com");
0 голосов
/ 27 февраля 2010

Я полагаю, что вы можете установить cookie на example.com (действительно .example.com), и он будет отправлен, если они перейдут на www.example.com, но не наоборот Эта стандартная политика безопасности запрещает отправку личных данных пользователей на непредусмотренные серверы.

Лично я использую виртуальных хостов в моем apache2.conf:

<VirtualHost *:80>
    ServerName example.com
    RedirectMatch (.*) http://www.example.com$1
</VirtualHost>

... в этом примере каждый, кто пытается загрузить, например, http://example.com/index.html перенаправляется на http://www.example.com/index.html.

0 голосов
/ 27 февраля 2010

потому что php переводит www.mydomain.com не так, как mydomain.com. Если домены не идентичны на 100%, файл cookie не будет совпадать.

И я уверен, что браузер также ищет 100% совпадение доменного имени, прежде чем серверы смогут их перезаписать.

Просто используйте .htaccess для перенаправления. Это единственный УВЕРЕННЫЙ способ решить эту проблему во всех браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...