У меня есть класс Уведомления , который используется для одноразовых уведомлений о сообщениях. Уведомления хранятся в сеансе Kohana (cookie), и мой метод получения выглядит следующим образом (эхо есть для целей отладки):
private static function _get($key)
{
$session = Session::instance();
$value = $session->get($key);
echo $key . ': ' . $session->get($key) . '<br />';
$session->delete($key);
echo 'deleted ' .$key. ', value now: ' .$session->get($key). '<br /><br />';
return $value;
}
Теперь одна страница, на которой я использую этот класс, - это страница входа. Когда пользователь вводит неверную информацию для входа в систему, он делает то, что я ожидаю, тоже: выводит сообщение об ошибке «неправильный логин / пароль». Затем это сообщение должно быть удалено , как я вызвал получатель, а получатель удаляет его из сеанса.
Однако это не так. Сообщение также отображается на следующей странице. И если я перехожу на любую другую страницу, на которой отображаются уведомления, там также будет отображаться ошибка, пока не отобразится другая ошибка (скажем, если я неправильно введу информацию в другую форму).
Это то, что отображается из эхо на странице:
ошибка: неверное сочетание имени пользователя и пароля.
удаленная ошибка, значение сейчас:
Что говорит о том, что значение равно при удалении, но оно все равно показывает то же самое, когда я обновляю страницу.
Если это помогает, то таков процесс установки сообщения об ошибке из контроллера, который я называю Notices::error('message');
, который вызывает этот метод:
public static function error($value = NULL)
{
return Notices::_notice('error', $value);
}
который звонит:
private static function _notice($key, $value)
{
// If value is not NULL, then store the notice
if ( ! is_null($value))
{
Notices::_set($key, $value);
return TRUE;
}
else
{
// If value is not NULL. retieve key and format HTML
if ( ! is_null($value = Notices::_get($key)))
{
return "$value";
}
// If the key does not exist return empty string
else
{
return '';
}
}
}
и сеттер выглядит так:
private static function _set($key, $value)
{
Session::instance()->set($key, $value);
return TRUE;
}