cakephp - переменная сеанса продолжает вести себя странно
-
22-08-2019 - |
Вопрос
По непонятным мне причинам переменная сеанса, содержащая имя клиента, появляется на короткое время, а затем исчезает.
В app_controller.php:передФильтр()
if (isset($_SESSION['customer_name']) == false ||
strlen($_SESSION['customer_name']) == 0)
{
$customer = $this->Customer->read(null, $auth['User']['customer_id']);
$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname'];
$this->Session->write('customer_name', $name);
$this->set('name', $this->Session->read('customer_name'));
}
else
{
$this->set('name', $this->Session->read('customer_name'));
}
Я пробовал варианты проверки того, установлен ли сеанс, например
if ($this->Session->check('customer_name') == false)
Все ведет себя так же странно, какое-то время отображается в поле зрения, а затем исчезает.Не возвращается при закрытии браузера или повторном входе в систему.Случайные небольшие изменения в этом коде, похоже, на короткое время возвращают его к жизни.
Решение 4
Эта строка:
$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname'];
Позволяет $name быть равным " ", что означает, что его строка равна 1 и он не пуст.Не знаю, почему он не получил данные о клиенте, но теперь я могу проверить это значение.
Другие советы
Использовать $this->Сессия->чтение() вместо прямых вызовов $_SESSION, поскольку cakephp может хранить сеанс где-то еще, где его ожидает родной PHP.
Кроме того, я не совсем понимаю, что вы подразумеваете под «исчезновением на некоторое время». Если вы остаетесь на той же странице и просто продолжаете нажимать «Обновить», оно отображается/исчезает случайным образом?
Закрытие браузера вполне может стать причиной разрушения вашего сеанса. Наблюдаете ли вы такое поведение в разных браузерах?
Какие твои Session.*
сеансы в app/config/core.php?
Это решило нашу проблему:
if($this->Session->check('customer_name'))
Не совсем понимаю, в чем проблема, но я бы начал с удаления вызовов $_SESSION.я бы тоже поменял
strlen($_SESSION['customer_name']) == 0
к
empty($_SESSION['customer_name'])
Единственное, о чем я могу думать, это снизить уровень безопасности в /config/core.php, может быть, вы полностью теряете сеанс?
обычно сеанс завершается через несколько минут в торте.Найдите эту строку в файле config/core.php:
Настройка::write('Session.timeout'
и установите значение 999999999.Это должно решить проблему.
Обратите внимание, что иногда расширения FireFox могут вызывать сброс сеанса.При каждом изменении User-Agent сеанс сбрасывается.
Недавно я столкнулся с этой проблемой, используя расширение FireBug под названием FirePHP:
http://blog.kevburnsjr.com/cakephp-session-error-user-agent-must-be-consistent