CakePHP会话不工作

CakePHP会话不工作,php,ajax,session,cakephp,Php,Ajax,Session,Cakephp,我试图用cakePHP在会话中保存数据。我已经在线阅读了文档和许多示例,但我似乎无法在会话中保存数据 在我的控制器中,我添加了会话写入功能: public function take(){ if(array_key_exists('option', $this->request->data)){ foreach($this->request->data['option'] as $cmd => $options){ f

我试图用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;
}
<pre>
<?php print_r($this->Session->read());?>
</pre>
我通过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,所以我创建了一个元素,我调用它来检查会话。这是元素的内容:

我已经将core.php文件会话默认值从“php”改为“cake”再改回来,但这两个选项似乎都没有帮助

如有任何建议,将不胜感激


我看到的一些答案建议在core.php中设置'checkAgent'=>false,但这也没有帮助。
在CakePHP 1.x中,可以将安全级别设置为medium来解决问题,但在2.x中,此选项不可用。

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


我最终只是使用了回发而不是AJAX调用,而在AJAX调用中不起作用的代码逻辑在回发中工作得非常好

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


我最终只是使用了回发而不是AJAX调用,而在AJAX调用中不起作用的代码逻辑在回发中工作得非常好

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


我最终只是使用了回发而不是AJAX调用,而在AJAX调用中不起作用的代码逻辑在回发中工作得非常好

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


我最终只是使用了回发而不是AJAX调用,而在AJAX调用中不起作用的代码逻辑在回发中工作得非常好

你提到过你有这个想法

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

试试这个



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

您提到的视图中有此选项

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

试试这个



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

您提到的视图中有此选项

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

试试这个



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

您提到的视图中有此选项

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

试试这个




此外,请确保您正在添加“SessionHelper”。

如果控制器中的php open标记前有空格或php close标记后有空格,则会导致会话无法工作。检查您的控制器(和其他组件,如果有)是否在关闭
“?>”
后有多余的空间/新行,或打开标记前有空格
“如果控制器中的php打开标记前有空格或php关闭标记后有空格将导致无法工作会话。检查您的控制器(和其他组件,如果有)对于关闭
“?>”
后的额外空格/新行或打开标记前的空格
“,如果控制器中的php打开标记前有空格或php关闭标记后有空格,将导致会话无法工作。检查您的控制器(和其他组件,如果有)是否在关闭
“?>”
后有多余的空间/新行,或打开标记前有空格
“如果控制器中的php打开标记前有空格或php关闭标记后有空格将导致无法工作会话。检查您的控制器(和其他组件,如果有)对于关闭
“?>”后的额外空间/新行“
或打开标记前的空间
”是否确实启用了会话支持?我遵循cakephp网站上的博客教程,flash消息可以正常工作。我使用的元素也会得到配置输出。这意味着会话支持已启用,对吗?请查看
phpinfo()
的输出,并搜索
session
以查看它是否已启用在“会话”部分中,会话支持已启用我认为刷新页面后将使用会话。调用Ajax后不能直接使用会话。之后你必须刷新页面。你确定你启用了会话支持吗?我遵循了cakephp网站上的博客教程,flash消息可以正常工作。我使用的元素也会得到配置输出。这意味着会话支持已启用,对吗?查看
phpinfo()
的输出,搜索
session
以查看它是否已启用在“会话”部分,会话支持已启用我认为会话将启用