Проблема с PHP cookie - www или без www

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com");

Ответ 3

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

Лично я использую virtualhosts в моем 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.

Ответ 4

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

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

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