3

我在蛋糕书中读到 Session in view 使用 SessionHelper,但是那个助手没有删除会话的方法。真的是这样吗,有人可以帮忙吗?

4

5 回答 5

5

删除会话数据,请使用控制器中的会话组件,而不是视图。

//example from the CakePHP book (linked above)
$this->Session->delete('Person');

或者:

destroy 方法将删除会话 cookie 和存储在临时文件系统中的所有会话数据。然后它将销毁 PHP 会话,然后创建一个新会话:

$this->Session->destroy();

虽然在技术上可以删除视图中的会话数据(毕竟它只是一个 PHP 文件),但 CakePHP 框架在构建时考虑了 MVC 结构。“V”(代表“视图”)应该只与显示控制器提供的数据(从模型中检索)有关。

模型处理访问数据/数据库,控制器处理应用程序逻辑。所以 - 会话组件(组件用于控制器)被赋予了删除会话数据的方法,但会话助手(助手用于视图)没有。

于 2012-11-15T04:03:29.550 回答
3

根据情况,可以使用自定义 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

于 2014-08-17T13:40:07.543 回答
1

在你看来试试unset($_SESSION['YOUR_SESSION_KEY']);

于 2013-05-30T12:26:01.700 回答
0

要删除会话变量,您可以使用以下代码(在 Controller 中)。

// same as unset($_SESSION['your_session_varable'])
$this->Session->delete('your_session_varable');

您可以调用以下命令销毁所有会话变量:

$this->Session->destroy();
于 2012-11-15T07:23:56.900 回答
0

如果会话数据是一个数组,并且您想像 setFlash 一样只访问它一次,您可以将数组设置为 setFlash,不带模板 = false。

$this->Session->setFlash($arrayData,false,array(),'formData');

然后在视图中访问它

$data = $this->Session->flash('formData');
pr($data);
于 2016-06-24T12:35:42.047 回答