Запустите Magento с локального хоста на Mac
Хотя можно установить Magento локально, я, похоже, не могу заставить Magento фактически устанавливать файлы cookie в администраторе при входе в систему, если я использую имя хоста localhost:8080
.
Проработав некоторое время с Magento, я знаю об этом ограничении и локальной модификации Mage_Core_Model_Session_Abstract_Varien
, чтобы изменить эту проверку:
if (isset($cookieParams['domain'])) {
$cookieParams['domain'] = $cookie->getDomain();
}
К этому:
if (isset($cookieParams['domain']) && !in_array('127.0.0.1', self::getValidatorData())) {
$cookieParams['domain'] = $cookie->getDomain();
}
Это хорошо работает для большинства локальных сред разработки. Однако это не работает для Mac. Я ищу компьютер на базе OSX решение.
Я использую веб-сервер PHP 5.4, и это только для образовательных/экспериментальных целей. В производстве я предпочитаю Apache под Linux. Это было бы не для производственных целей - смотрите Мой ответ ниже для получения более подробной информации о том, как PHP интерпретирует локальный адрес для IPv6.
3 answers
При запуске вашего веб-сервера вы можете указать localhost
или 127.0.0.1
- имя, которое вы указываете, не имеет значения, это не объявление виртуального хоста, это просто для указания адреса прослушивания.
Но вам нужно иметь в виду, что ваша ОС может разрешить localhost
на свой IPv6-адрес, а не на адрес IPv4, поэтому она будет прослушивать не тот протокол.
Поэтому будьте откровенны и используйте 127.0.0.1
при указании адреса прослушивания.
Но тогда для вашего магазина просто определите другое имя хоста, как предложил Алан, которое все еще указывает на 127.0.0.1
в вашем файле HOSTS.
Веб-сервер PHP не прослушивает трафик, предназначенный для него для определенного сервера/имени хоста - он просто прослушивает что-либо вообще на этом IP:порту - почти как файл 000-default
при чистой установке Apache.
Поэтому просто убедитесь, что вы установили Magento с любым именем хоста (кроме localhost!), При условии, что в нем есть запись HOSTS, указывающая на 127.0.0.1
Вам никогда не нужно редактировать любые основные файлы, чтобы это работало.
ПРИМЕЧАНИЕ.
::1 != 127.0.0.1
Они оба указывают на одну и ту же машину, но не на один и тот же протокол.
На протяжении многих лет в OS X возникали многочисленные проблемы и регрессии, когда браузеры на основе webkit неправильно устанавливали файлы cookie для домена localhost
. Если это одна из проблем, с которой вы столкнулись, вы мало что можете сделать, чтобы исправить ее на стороне сервера - это проблема на стороне клиента. Доменное имя localhost
в конечном итоге обрабатывается иначе, чем другие доменные имена.
Не совсем то, что вы просили, но лучший способ решить эту проблему - не использовать localhost
в качестве доменного имени, и вместо этого используйте свой файл /etc/hosts
для настройки пользовательских доменных имен разработки magento.dev, www.magento.dev, etc
, которые указывают на 127.0.0.1
.
На компьютере Mac измените изменение Mage_Core_Model_Session_Abstract_Varien
на следующее:
if (isset($cookieParams['domain']) && !in_array('::1', self::getValidatorData())) {
$cookieParams['domain'] = $cookie->getDomain();
}
Это работает, потому что ::1
находится localhost
в OSX, как показал анализ remote_addr, о котором сообщает self::getValidatorData()
:
array(4) {
["remote_addr"]=>
string(3) "::1"
["http_via"]=>
string(0) ""
["http_x_forwarded_for"]=>
string(0) ""
["http_user_agent"]=>
string(119) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
}
Изменить:
Адрес ::1
является эквивалентом IPv6 127.0.0.1
- это 128-битное число, первые 127 битов которого равны "0", а 128-й бит равен "1". Это всего лишь один адрес, поэтому его также можно записать как::1/128.
В случае Apache (или другой веб-сервер) настраивается на использование IPv6-адресации для локального
Смотрите Этот пост SO для получения дополнительной информации о том, как заставить PHP возвращать адрес IP4 вместо этого - по сути, настройте свой vhost для прослушивания адреса IP4 - например Listen 127.0.0.1:80
:
Https://stackoverflow.com/questions/3699454/should-ip-serverremote-addr-return-1-on-a-mamp-localhost
Другие Источники: http://ipv6exchange.net/questions/16/what-is-the-loopback-127001-equivalent-ipv6-address
Отказ от ответственности
В моем случае, однако, я не использую Apache, поэтому предлагаемое решение было предпочтительнее, и этот ответ опубликован в качестве руководства для тех, кто хочет настроить локальную разработку на OSX, в частности, со встроенным веб-сервером PHP. Кроме того, вы никогда не должны фиксировать это исправление в какой-либо системе управления версиями, и его не следует использовать в рабочей среде окружающая среда