CakePHP sessões não funcionam

Estou tentando salvar dados na session com cakePHP. Eu li a documentação e muitos exemplos on-line, mas não consigo salvar os dados na session.

No meu controlador adicionei a function de gravação da session:

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; } 

Eu estou chamando a ação via 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; } ); 

Porque eu estou usando o ajax, criei um elemento que eu chamo para verificar a session. Este é o conteúdo do elemento:

 
 Session->read());?> 

Mas a variável de session “TakenCommand” não aparece na saída.

Eu adicionei o componente Session ao arquivo AppController.php:

 public $components = array('Session'); 

E eu alterei o padrão de session de arquivo core.php de “php” para “bolo” e vice-versa, mas nem parece ajudar.

Qualquer sugestão será muito apreciada!


Algumas respostas que eu vi sugeriram configurar ‘checkAgent’ => false no core.php, mas isso também não ajuda. No CakePHP 1.x foi possível configurar o nível de segurança para o meio que resolveria o problema, mas esta opção não está disponível em 2.x.

Se houver espaço antes da tag ou espaços abertos do php após as tags de fechamento php nos controladores, isso causará a não session de trabalho. Verifique os seus controladores (e outros componentes, se existir) para espaço extra / nova linha após um fechamento "?> " ou espaços antes de abrir as tags " < ?php"

Você mencionou que você tem isso em sua opinião

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

Tente usar isso

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

Além disso, certifique-se de que está adicionando “SessionHelper”.

Eu tinha encontrado os mesmos problemas ao usar Session + AJAX. Se você usar o DebugKit.Toolbar, você notará que, mesmo após a resposta AJAX, a variável Session não é exibida na barra de ferramentas. Eu pensei que era apenas um problema de exibição, mas poderia ser outra coisa. Além disso, não consegui ler da Session no meu método AJAX. Para os seus propósitos, essa restrição pode estar OK, como você parece estar sobrescrevendo a variável Session, em vez de adicionar a ela.

Acabei usando apenas um POSTback em vez de uma chamada AJAX, e a mesma lógica de código que não funcionava na chamada AJAX funcionou perfeitamente no POSTback.