Почему сеансы Laravel перестали работать только в Safari и IE после переключения сервера?

Новый VPS-сервер с Webmin, Apache Centos 6, приложением Laravel и старой схемой базы данных. Все работает нормально на старом общем хосте, но по VPS по какой-то причине хранилище Session Laravel (Laravel 3.0) больше не работает в Safari или Internet Explorer.

Кажется, что идентификатор сеанса просто не экономит на клиенте. Является ли хорошим способом заставить идентификатор сеанса Laravel сохранять в браузере клиентов?

В чем разница между тем, как Safari / IE хранит файлы cookie, которые могут создавать эту проблему, когда Chrome/Firefox работает отлично?

3 ответа

Куки-файлы могут приводить в замешательство, если время / часовой пояс на сервере неверен. Проверьте часовой пояс / настройку времени на сервере.

Обратите внимание, что вам нужно проверить фактическое время / часовой пояс в ОС, а не только часовой пояс в PHP. Но вы можете проверить с помощью PHP, установив часовой пояс в PHP (date_default_timezone_set()) по вашему местному времени и с просьбой PHP о дате; если он не совпадает, значит, сервер настроен неправильно. Обратите внимание, что настройка часового пояса в PHP, чтобы он выглядел правильно, не решит проблему с cookie, вы должны правильно установить время / часовой пояс ОС, используя "дату" в ОС.

Другой способ проверить, является ли это проблемой: установить срок действия файлов cookie через год - они показываются? Если часовой пояс неправильный, они будут отображаться (> разница часового пояса), но 2-часовой cookie может не (

Причина: поскольку файлы cookie устанавливаются с использованием фактического времени (то есть "срок действия файлов cookie истекает 25 июля 2013 г. 15:13 по Гринвичу"). Если ваш локальный компьютер настроен не так, как сервер, тогда срок действия файла cookie может истечь до его отправки. Некоторые браузеры исправляют это (FF раньше, Chrome может теперь также).

Так как здесь изменился сервер, проверьте время на вашем сервере. (Также дважды проверьте ваш собственный компьютер для хорошей меры).

Это классическая междоменная проблема IE/Safari / iframe.

Возможное решение проблемы с iframe в Laravel IE (работает для меня). Просто добавьте это в ваш App::after filter.

App::after(function ($request, $response){
  $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS"');
});

Вы даже можете указать, для какого маршрута вам нужен этот заголовок, для меня это было все за пределами /external/, поэтому код выглядит так:

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 не перенаправляет example.com на http://www.example.com, а мой URL-адрес, по которому я хочу перейти, не имеет www, но я был авторизован на http://www.example.com.

Вместо этого:

ajax:{
 url: "https://example.com" + "/user_list"
 }

Я использовал это:

ajax:{
 url: "https://" + window.location.hostname + "/user_list"
 }

С этой заменой вы продолжите с любого адреса, который вы ввели. С www или без него

Вам нужно проверить, что ВСЕ на новом сервере совпадает со старым сервером... это может сделать более старая или более новая версия программного обеспечения, возможно, даже другие настройки 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.

И эти [решенные] сеансы иногда не сохраняются между запросами

Другие вопросы по тегам