2010-12-08 67 views
4

我正在使用jQuery cookie插件來設置一個cookie,名爲'orderStatus',值爲'success'。這是工作查找,我已經檢查,cookie設置正確並存在。然而,當我來讀我的控制器餅乾,像這樣:Cakephp:讀取cookie問題

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

,然後呼應$ status的內容爲空。任何人都知道我在做什麼錯了?我已經設置了使用cookie組件的蛋糕,所以這不是問題。謝謝

回答

11

答案很遺憾,您無法閱讀使用cakephp通過任何其他方法編寫的cookie。 Cake中的Cookie組件並沒有考慮到互操作性。 read方法只能讀取由cookie cookie組件方法寫入的cookie。

爲了讀取您的控制器中由javascript設置的cookie,您必須訪問PHP原生的$ _COOKIE變量。

+0

這是可能的 - 檢查我的答案在下面。 – kriskodzi 2015-05-13 09:48:30

0

首先,這可能會對您的應用程序造成很大的風險。請記住,Cookie是用戶可以自行修改的數據。所以如果這是驗證,可能會有錯誤。現在

,我不知道您是否設置cookie,而是設置在CakePHP中餅乾的方法是通過Model.field語法:

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

嘗試設置相同的控制器上面一個cookie,現在嘗試閱讀並開始回溯。

+0

你是對的,在某些情況下,它可能有嚴重的安全問題,但在我的情況下,我用它來顯示歐盟餅乾政策,所以我不在乎是否有人會刪除該cookie,他們將不得不再次看到警告。 – 2014-07-17 12:30:37

1

你能夠設置其他cookie值嗎?以下代碼的輸出是什麼?

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

如果您使用相同的命名空間作爲由Cookie保存的Cookie,並且Cookie Cookie組件使用該命名空間作爲默認名稱空間。命名空間是「CakeCookie」

所以你的cookie必須像:

CakeCookie[your_cookie_name] 
0

你可以閱讀從CakePHP的jQuery的餅乾,唯一的問題是,他們不能被加密

如果您使用的是例如jCookie(https://github.com/carhartl/jquery-cookie),下面的代碼將爲您工作,將myCompany替換爲配置文件中的Cookie名稱。

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

然後,在你的控制器:

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

如果使用CakePHP 3將返回true(CakePHP的> 2.2)和

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

將返回 '喂'

。 x應該是這樣的:

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