Проблемы с cookie / сеансом CakePHP

У меня проблемы с моим приложением CakePHP. Похоже, это происходит только в IE и только на определенных компьютерах. Тем не менее, это постоянно на компьютерах, где это происходит.

Проблема первая: Пользователь вошел в систему, находится на странице 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 на не-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 в своем приложении, я просто подумал, что это может быть ключом к разгадке того, что не так.


ОБНОВЛЕНИЕ

Я последовал совету Густава Бертрама и посмотрел на строку пользовательского агента. Я сравнил строку пользовательского агента с IE на компьютере, на котором возникла проблема, с IE на компьютере, на котором проблемы не было. Они были такими же, за исключением того, у которого возникли проблемы, в строке пользовательского агента есть "google chrome frame". Я удалил Google Chrome Frame с этого компьютера, перезапустил, попробовал еще раз, и проблема, похоже, была решена.

Если это истинная причина, то простым решением было бы заставить пользователей удалить фрейм Chrome. Однако мне интересно, есть ли работа, которая позволила бы им установить хромированную рамку и по-прежнему работать.

20
задан Community 23 May 2017 в 12:13
поделиться