我在蛋糕书中读到 Session in view 使用 SessionHelper,但是那个助手没有删除会话的方法。真的是这样吗,有人可以帮忙吗?
5 回答
//example from the CakePHP book (linked above)
$this->Session->delete('Person');
或者:
destroy 方法将删除会话 cookie 和存储在临时文件系统中的所有会话数据。然后它将销毁 PHP 会话,然后创建一个新会话:
$this->Session->destroy();
虽然在技术上可以删除视图中的会话数据(毕竟它只是一个 PHP 文件),但 CakePHP 框架在构建时考虑了 MVC 结构。“V”(代表“视图”)应该只与显示控制器提供的数据(从模型中检索)有关。
模型处理访问数据/数据库,控制器处理应用程序逻辑。所以 - 会话组件(组件用于控制器)被赋予了删除会话数据的方法,但会话助手(助手用于视图)没有。
根据情况,可以使用自定义 Flash 消息。使用自定义键设置 Flash 消息,如下所示
$this->Session->setFlash('my_value', 'default', array(), 'my_key');
并使用 flash 方法在视图中读取它(它会自动删除它)
$value = $this->Session->flash('my_key');
这篇文章中的更多详细信息http://hashmode.com/cakephp-delete-session-in-view/81
在你看来试试unset($_SESSION['YOUR_SESSION_KEY']);
。
要删除会话变量,您可以使用以下代码(在 Controller 中)。
// same as unset($_SESSION['your_session_varable'])
$this->Session->delete('your_session_varable');
您可以调用以下命令销毁所有会话变量:
$this->Session->destroy();
如果会话数据是一个数组,并且您想像 setFlash 一样只访问它一次,您可以将数组设置为 setFlash,不带模板 = false。
$this->Session->setFlash($arrayData,false,array(),'formData');
然后在视图中访问它
$data = $this->Session->flash('formData');
pr($data);