0

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 では、セキュリティ レベルを中に設定して問題を解決することができましたが、このオプションは 2.x では利用できません。

4

3 に答える 3

0

セッション + AJAX を使用しているときに、同じ問題に遭遇しました。DebugKit.Toolbar を使用すると、AJAX 応答の後でも、Session 変数がツールバーに表示されないことに気付くでしょう。単なる表示上の問題だと思っていましたが、別の問題かもしれません。また、AJAX メソッドでセッションからまったく読み取ることができませんでした。セッション変数に追加するのではなく上書きしているように見えるため、その制限は問題ないかもしれません。

結局、AJAX 呼び出しの代わりに POSTback を使用することになり、AJAX 呼び出しでは機能しなかった同じコード ロジックが POSTback でも完全に機能しました。

于 2013-11-08T14:40:49.580 に答える