【发布时间】:2013-11-19 19:18:18
【问题描述】:
我正在尝试使用 cakePHP 在会话中保存数据。我已经在线阅读了文档和许多示例,但我似乎无法在会话中保存数据。
在我的控制器中,我添加了会话写入功能:
public function take(){
if(array_key_exists('option', $this->request->data)){
foreach($this->request->data['option'] as $cmd => $options){
foreach($options as $cmd => $option){
$buildCmnd = '-1 RENDERER*'.$this->request->data['Playlist']['layer'].'*TREE*$master*SCRIPT*INSTANCE*externalCommand SET '.$this->request->data['Playlist']['el'].' '.$cmd.' text={'.$option.'}';
$this->send($buildCmnd);
}
}
}
$this->Session->write('TakenCommand', array( $this->request->data['Playlist']['el'] ) );
$this->autoRender = false;
}
我通过 jquery ajax 调用操作:
$("#inputTake").click(
function()
{
jQuery.ajax({
type:'POST',
async: true,
cache: false,
url: '/Controller/take',
success: function(response) {
jQuery('#resultField').val(response);
},
data:jQuery('form').serialize()
});
return false;
}
);
因为我使用的是 ajax,所以我创建了一个元素,我调用它来检查会话。这是元素的内容:
<pre>
<?php print_r($this->Session->read());?>
</pre>
但是输出中没有出现会话变量“TakenCommand”。
我已将 Session 组件添加到 AppController.php 文件中:
public $components = array('Session');
我已将 core.php 文件会话默认值从“php”更改为“cake”并返回,但似乎都没有帮助。
任何建议将不胜感激!
我看到的一些答案建议在 core.php 中设置 'checkAgent' => false 但这也无济于事。 在 CakePHP 1.x 中可以将安全级别设置为 medium 以解决问题,但在 2.x 中此选项不可用。
【问题讨论】:
-
你确定你启用了会话支持
-
我按照 cakephp 网站上的博客教程进行操作,并且 Flash 消息有效。同样使用我正在使用的元素,我得到了配置输出。这意味着启用了会话支持吗?
-
查看
phpinfo()的输出,搜索session看是否开启 -
在“会话”部分下,启用会话支持
-
我认为刷新页面后会使用会话。调用 Ajax 后不能直接使用 session。之后你必须刷新页面。