У меня возникают проблемы с моим приложением CakePHP. Кажется, это происходит только в IE, и только на определенных компьютерах. Это согласовано на компьютерах, где это происходит.
Проблема 1: Пользователь вошел в систему и на странице https://example.com/users/view и щелкает выходы. Пользователь перенаправляется на http://example.com и, как представляется, выходит из системы, пока пользователь не посещает другую страницу https, и они все еще вошли в систему. Они могут щелкнуть выходить из системы столько раз, сколько они хотят, но они всегда регистрируются на https и только выходят из системы на http.
Проблема вторая: Пользователь регистрируется в https://example.com/users/signin, они перенаправляются на http://example.com и теперь, похоже, вошли в систему. Пользователь переходит на https://example.com/admin/slides и еще не знает об этом, но теперь вышел из системы, нажатие на любую другую страницу (или просто обновление их текущей страницы) попросит их снова войти в систему.
Я понятия не имею, что происходит. Я прочитал и опробовал решения, описанные по обеим аналогичным проблемам: Сессия не сохраняется при переходе с ssl на non-ssl и Cookie не обновляется/перезаписывается в IE, но у меня все еще есть те же проблемы.
Единственный ключ, который я заметил до сих пор (и я не знаю, означает ли это что-либо), когда я отлаживаю как $_SESSION
, так и $this->Session->read()
на HTTP-страницах ВСЕГДА только $this- > Session- > read ( ) возвращает значение. на HTTPS-страницах некоторые ВСЕГДА возвращают одинаковое значение для обоих, другие ВСЕГДА возвращают только значение $this- > Session- > read().
Например, http://example.com и https://example.com/users никогда не видит $_SESSION, https://example.com/carts всегда видит $_SESSION. Я не уверен, но я думаю, что, возможно, защищенные страницы должны видеть это, а так как некоторые не могут что-то не так, однако, когда я проверяю код, я не вижу никакой разницы, которая бы подсказывала, почему это делается, т.
Кроме того, если я добавлю $this->Session->destroy()
в beforeFilter в AppController, тогда все страницы, даже HTTP, могут видеть $_SESSION. Я фактически не использую $_SESSION в своем приложении, я просто подумал, что это может быть ключом к ошибкам.
UPDATE
Я взял совет Густава Бертрама и посмотрел на строку пользовательского агента. Я сравнил строку пользовательского агента с IE на компьютере, на котором возникла проблема с IE на компьютере, который не имел проблемы. Они были теми же, за исключением тех, у кого были проблемы, есть "хром-фрейм Google" в строке пользовательского агента. Я удалил Google Chrome Frame с этого компьютера, перезапустил, снова попытался, и проблема, казалось, была решена.
Если это истинная причина, то простым решением было бы заставить пользователей удалять фрейм Chrome. Однако я задаюсь вопросом, есть ли работа вокруг, которая позволит им установить хромированный фрейм и все еще работать.