CakePHP会话无法正常工作

时间:2013-11-07 22:22:04

标签: php ajax session cakephp

我正在尝试使用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”并返回,但似乎都没有帮助。

任何建议都将不胜感激!


我看到的一些答案建议设置'checkAgent'=&gt;在core.php中为false,但这也无济于事。 在CakePHP 1.x中可以将安全级别设置为中,这将解决问题,但2.x中不提供此选项。

3 个答案:

答案 0 :(得分:2)

如果在php打开标记或空格之前有空格,那么控制器中的php关闭标记将导致无法工作会话。在关闭"?> "之前检查您的控制器(以及其他组件,如果有)以获得额外的空格/新行,或者在打开标签之前检查空格" <?php"

答案 1 :(得分:1)

你提到你在视图中有这个

<?php print_r($this->Session->read());?>

尝试使用此

<?php print_r($this->Session->read('TakenCommand')); ?>

另外,请确保添加“SessionHelper”。

答案 2 :(得分:0)

使用Session + AJAX时遇到了同样的问题。如果使用DebugKit.Toolbar,您会注意到即使在AJAX响应之后,工具栏上也没有显示Session变量。我认为这只是一个显示问题,但可能是其他问题。另外,我无法在我的AJAX方法中读取Session。出于您的目的,限制可能没问题,因为您似乎覆盖了Session变量而不是添加到它上面。

我最终只使用了POSTback而不是AJAX调用,并且在AJAX调用中无效的相同代码逻辑在POSTback中完美运行。