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

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

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

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

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

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

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

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

Я считаю, что вы можете установить файл cookie на example.com (на самом деле .example.com), и он будет отправлен, если они отправятся на сайт http://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 .

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

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

Просто используйте .htaccess для перенаправления. Это единственный способ справиться с этим во всех браузерах.