cakephp - переменная сессии продолжает работать странно - PullRequest
1 голос
/ 16 мая 2009

По причинам, которые меня не устраивают, переменная сеанса, содержащая имя клиента, будет отображаться на короткое время, а затем исчезнет.

В app_controller.php: beforeFilter ()

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)

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

Ответы [ 6 ]

2 голосов
/ 17 мая 2009

Используйте $ this-> Session-> read () вместо прямых вызовов $ _SESSION, так как cakephp может хранить сеанс где-то еще, где его ожидает нативный PHP.

Кроме того, я не совсем понимаю, что вы имеете в виду под словом «исчезнуть на некоторое время», если вы остаетесь на той же странице и просто нажимаете кнопку «Обновить», она отображается / исчезает случайно?

Закрытие браузера вполне может быть причиной уничтожения вашего сеанса, также вы испытываете такое поведение в разных браузерах?

Каковы ваши Session.* сообщения в app / config / core.php?

1 голос
/ 10 октября 2012

Это решило нашу проблему:

if($this->Session->check('customer_name'))

0 голосов
/ 04 марта 2010

Обратите внимание, что иногда расширения FireFox могут вызвать сброс сеанса. Каждый раз, когда пользователь-агент изменяется, сеанс сбрасывается.

Недавно я столкнулся с этой проблемой, используя расширение FireBug под названием FirePHP:
http://blog.kevburnsjr.com/cakephp-session-error-user-agent-must-be-consistent

0 голосов
/ 18 мая 2009

обычно сессия заканчивается через несколько минут в торте. Найдите эту строку в файле config / core.php:

Настройка :: записи ( 'Session.timeout'

и установите его как 999999999. Это должно решить проблему.

0 голосов
/ 17 мая 2009

Эта строка:

$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname'];

Позволяет $ name равняться "", что означает, что он имеет значение 1 и не является пустым. Не уверен, почему он не получил данные клиента, но теперь я могу проверить это значение.

0 голосов
/ 16 мая 2009

Не совсем уверен, в чем проблема, но я бы начал с удаления вызовов $ _SESSION. Я бы тоже поменял

strlen($_SESSION['customer_name']) == 0

до

empty($_SESSION['customer_name'])

Единственное, о чем я могу подумать, это понизить уровень безопасности в /config/core.php, может быть, вы теряете сессию полностью?

...