Cakephp 2.x Сессия истекает очень скоро - PullRequest
0 голосов
/ 07 января 2019

На моем сайте Выйти из системы до истечения времени сеанса. Я использую Cakephp 2.8. Это хорошо работает на локальном, но не на сервере. Я размещаю свой сайт на BigRock Я так старался, что не мог найти причину этого.

В config / code.php

Configure::write('Session', array(
    'defaults' => 'php',
    'timeout' => 43200 // 30 days
));

Ниже приведен снимок хранилища файлов cookie Chrome. enter image description here

Ответы [ 2 ]

0 голосов
/ 22 января 2019

его проблема возникает из-за того, что балансировщики нагрузки направляют запросы на разные серверы, а серверы настроены для хранения данных сеанса в локальном хранилище / кешировании на отдельных серверах.

Когда сервер получает запрос с идентификатором сеанса, который был назначен другим сервером, он не распознает идентификатор сеанса, поскольку он отсутствует в локальном хранилище / кэше сеанса. Следовательно, он отправит заголовок 401 - Unauthorized для повторной аутентификации клиента.

Решение для этого может быть реализовано в два слоя:

  • На сетевом уровне путем настройки «липких сессий» в балансировщиках нагрузки.
  • На уровне приложений путем настройки хранилища сеансов для совместного использования между различными серверами приложений (т. Е. @ 50ShardsOfGray предложил использовать кэш redis / memcached или базу данных для общего хранилища сеансов).

Оба эти решения имеют как свои преимущества, так и недостатки, при этом основным недостатком является потеря гибкости. Это одна из причин, по которой микросервисные архитектуры используют исключительно токены jwt для аутентификации и авторизации.

ИМХО, какой уровень вы решите внедрить, будет зависеть от требований к производительности и усилиям для реализации изменения. На мой взгляд, вы можете легко изменить конфигурацию приложения для хранения сеансов в базе данных (хотя кэш-память гораздо более предпочтительна), но это определенно приведет к снижению производительности.

0 голосов
/ 07 января 2019

Я столкнулся с той же проблемой, так как серверы использовали балансировку нагрузки. При смене хоста сеанс был потерян. Вы уже связались с BigRock?

Для решения этой проблемы вы можете поместить сеанс в базу данных или перерисовать / сохранить в памяти.

...