cakephp - переменная сеанса продолжает вести себя странно

StackOverflow https://stackoverflow.com/questions/873031

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top