2010-12-08 30 views
4

jQueryクッキープラグインを使用して、 'orderStatus'という名前のクッキーを 'success'の値に設定しています。これは動作していると私はチェックして、クッキーが正しく設定されている。しかし、コントローラのクッキーを読むようになると、次のようになります。Cakephp:クッキーの問題を解決する

$status = $this->Cookie->read('orderStatus'); 

次に、$ statusの内容をエコーし​​ます。誰でも私が間違っていることを知っている?私はクッキーコンポーネントを使用するようにケーキを設定したので、問題ではありません。ありがとう

答えて

11

答えは、残念ながら、cakephpを使用して他の方法で書き込まれたCookieを読み取ることができません。ケーキのCookieコンポーネントは、相互運用性を考慮して書かれていませんでした。 readメソッドは、ケーキクッキーコンポーネントメソッドによって書き込まれたクッキーのみを読み取ることができます。

コントローラのjavascriptで設定されたクッキーを読み込むには、PHPのネイティブ変数$ _COOKIEにアクセスする必要があります。

+0

可能です - 下記の私の答えをチェックしてください。 – kriskodzi

0

まず、あなたのアプリケーションにとって大きなリスクがあるかもしれません。覚えておいてください。クッキーは、ユーザのデータです。は単独で変更できます。したがって、検証の場合、エラーが発生する可能性があります。

今、あなたはクッキーを設定している場合、私は知りませんが、CakePHPの中にクッキーを設定する方法はModel.field構文である:

$this->Cookie->read('Order.status'); 

今、同じコントローラ上にクッキーを設定してみてくださいそれを読んでから、バックトレースを開始してください。

+0

場合によっては重大なセキュリティ上の問題が発生する可能性があります。私の場合はEUのクッキーポリシーを表示するために使用していますので、誰かがそのクッキーを削除しても警告を再度表示する必要があるかどうかは気にしません。 –

1

他のCookie値を設定できますか?次のコードの出力は何ですか?

<?php 
function testcookie() { 
    $this->Cookie->write('test', 'somevalue'); 
    echo $this->Cookie->read('test'); 
} 
?> 
6

デフォルトでCake Cookieコンポーネントで使用されているJavaScriptによって保存されたCookieに同じ名前空間を使用すると動作します。名前空間は

だからあなたのクッキーのようなものを見なければならない「CakeCookie」です:あなたは、CakePHPからjQueryのクッキーを読むことができます

CakeCookie[your_cookie_name] 
0

を、唯一の問題は、彼らを暗号化することができないということです。

たとえば、jCookie(https://github.com/carhartl/jquery-cookie)を使用している場合は、次のコードが役に立ちます。myCompanyをconfigファイルのCookie名に置き換えてください。

$.cookie.raw = true; 
$.cookie('myCompany[cookie_name]', 'hallo', { expires: 365, path: '/'}); 

次に、あなたのコントローラで:CakePHPの3を使用している場合

$this->Cookie->check('cookie_name') 

は 'ハロー'

を返します真(CakePHPの> 2.2)と

$this->Cookie->read('cookie_name') 

を返します。 xこれは次のようになります:

$this->Cookie->read('CakeCookie.cookie_name')