Новый сервер VPS с Webmin, Apache Centos 6, приложение Laravel и старая схема базы данных. Все работает отлично на старом общем хосте, но по VPS по какой-то причине хранилище сеансов Laravel (Laravel 3.0) больше не работает в Safari или Internet Explorer.
Кажется, что идентификатор сеанса просто не сохраняется на клиенте. Является ли хорошим способом заставить Laravel Session ID сохранять в браузере клиентов?
В чем разница между тем, как Safari / IE хранит файлы cookie, которые могут создать эту проблему, когда Chrome / Firefox работают отлично?
Куки-файлы могут обманывать трусики, если время / часовой пояс на сервере неверны. Проверьте настройку часового пояса / времени на сервере.
Обратите внимание, что вам нужно проверить фактическое время / часовой пояс в ОС, а не только часовой пояс в PHP. Но вы можете проверить использование PHP, установив часовой пояс в PHP ( date_default_timezone_set()
) на свое местное время и задав PHP для даты; если он не совпадает, сервер неправильно настроен. Обратите внимание, что настройка часового пояса в PHP, чтобы он выглядел правильно, не будет устранять проблему с файлом cookie, вы должны правильно установить время / время OS OS, используя «дату» в ОС.
Еще один способ проверить, является ли это проблемой: установить срок действия файлов cookie через год – они показывают? Если часовой пояс неверен, тогда они будут отображаться (> разница в часовом поясе), но в течение 2 часов cookie может не отображаться (
Причина. Поскольку файлы cookie устанавливаются с использованием фактического времени (т.е. «этот файл cookie истекает 25 июля 2013 года 15:13 по Гринвичу»). Если ваш локальный компьютер настроен иначе, чем сервер, тогда файл cookie может истек до его отправки. Некоторые браузеры исправны для этого (с FF, Chrome теперь может также).
Как вещь, которая изменилась здесь, это сервер, проверьте время на своем сервере. (Также проверьте свой собственный компьютер для хорошей оценки).
Это классическая проблема междоменного / iframe в IE / Safari.
Потенциальное исправление проблемы Laravel IE iframe cookie (работало для меня). Просто добавьте это в свой App :: after filter.
App::after(function ($request, $response){ $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS"'); });
Вы даже можете указать, для какого маршрута вам нужен этот заголовок, для меня это было все за пределами / внешний /, поэтому код выглядит так:
App::after(function ($request,$response){ if($request->is('external/*')){ // IE iframe cookie fix $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); } });
Вам нужно проверить, что ВСЕ на новом сервере идентичны старому серверу … старая или более новая версия программного обеспечения может это сделать, возможно, даже разные настройки htaccess …
2 других вопроса, чтобы рассмотреть …
Возможно, файл был поврежден во время перехода … Или что-то на стороне сервера испортило вещи … у бесплатной хостинговой компании, которую я использовал, были всплывающие окна, и из-за этих всплывающих окон вы не могли использовать обычную карту сайта для индексирования google, поскольку всплывающие окна вставляли что-то на вашу страницу.
Я также нашел это … Сессия не будет инициализировать или запомнить состояние между запросами
То, что я не знал, вызов setcookie автоматически префикс домена с периодом (.) Для совместимости. Что на доменном имени корневого уровня, это позволит доступ к этому файлу cookie на всех поддоменах. Который, не понимая этого, дал мне 2 сеансовых куки и произошло большое смешение.
Кажется, есть два способа исправить это:
Set the cookie configuration value to something else. Set the domain to "www.example.org" so that it is only available to the root-level domain name.
И это [разрешенные] сеансы иногда не сохраняются в запросах