我有一个通知类,用于提供一次性消息通知。通知存储在Kohana会话(cookie)中,我的getter看起来像这样(回音用于调试目的):
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;
}
现在,我使用此类的一个页面是登录页面。当用户输入错误的登录信息时,它也会按照我的预期进行操作:显示错误消息“用户名/密码不正确”。然后,当我调用getter并将getter从会话中删除时,此消息应删除。
但事实并非如此。该消息也显示在下一页上。如果我转到显示通知的任何其他页面,也会显示错误,直到显示不同的错误(例如,如果我错误地输入另一个表单上的信息)。
这是从页面上的echo中显示的内容:
错误:用户名/密码组合不正确 删除错误,现在值:
这表明值 被删除,但在刷新页面时它仍然显示相同的内容。
如果这有助于设置错误消息的过程如下,从控制器我调用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 '';
}
}
}
并且setter看起来像这样:
private static function _set($key, $value)
{
Session::instance()->set($key, $value);
return TRUE;
}
答案 0 :(得分:2)
如果您正在播放会话设置,请检查以下两项内容:
您还应该检查 Kohana_Session 类中现有的get_once
方法,该方法在将变量从$_SESSION
变量中取出后销毁该变量:
/**
* Get and delete a variable from the session array.
*
* $bar = $session->get_once('bar');
*
* @param string variable name
* @param mixed default value to return
* @return mixed
*/
public function get_once($key, $default = NULL)
{
$value = $this->get($key, $default);
unset($this->_data[$key]);
return $value;
}