2012-10-25 23 views
0

今天我有一個關於cakePHP cookies的問題。 如何告訴蛋糕php記住所有應用程序控制器中的cookie?CakePHP在所有控制器中讀取Cookie

我想要做的簡單協議接受。

例如,我有2個控制器。協議和信息。用戶必須接受協議才能查看我的應用中的信息和其他內容。

這是我的協議控制器(只是舉例):

class AgreementController extends AppController { 
    var $components = array('Cookie'); 

    public function acceptAgreement(){ 
     $this->Cookie->write('agreements', 'accepted'); 
    } 
} 

這是我的網頁控制器(只是舉例):

class InfopagesController extends AppController { 
public function showPage(){ 
    $cookie = $this->Cookie->read('agreements'); 
    if($cookie=="accepted"){ 
     /* CODE TO SHOW PAGE */ 
    } 
    else{ 
     /* REDIRECT TO AGREEMENTS */ 
    } 
} 

我想重定向我的應用程序,以協議控制器的所有控制器如果cookie是空的.. 我嘗試做,但cakephp只記得cookie在協議控制器的行動。 (在協議控制器)我的餅乾成分的

定義

function beforeFilter() { 
    $this->Cookie->name = 'regulamin'; 
    $this->Cookie->time = 3600; 
} 

任何人可以幫助我嗎?

回答

1

使用會話。 Cakephp網站在閱讀和寫作方面有一些很好的信息。請參閱http://book.cakephp.org/2.0/en/development/sessions.html

如果會話爲空,還可以將您的會話檢入到before_filter()回調中的app_controller.php中以轉發所有內容。 http://book.cakephp.org/2.0/en/controllers.html

+0

是啊,我知道,但我還想去做的餅乾,因爲瀏覽器記住了很長一段時間... –

+1

這聽起來像人登錄,如果是真的,你真的應該只是將它保存到個人配置文件,在登錄時閱讀並保存到會話中。 Cookie方式沒有安全性。 –

+0

不,它的唯一必須是一個鏈接到動作,並且這個動作設置了一個cookie。如果cookie不存在,用戶將看到一個條款和條件的頁面,並且必須點擊接受。 如果我使用會話,並且用戶將關閉網頁瀏覽器並再次打開它,他必須再次接受條款和條件,並且這不好 –

2

檢查添加到你的AppController :: beforeFilter()

$cookie = $this->Cookie->read('agreements'); 
    if ($cookie != "accepted" && (get_class($this) != 'YOUR-AGREEMENTS-CONTROLLER' && $this->action != 'AGREEMENTS-ACTION')) { 
     /* REDIRECT TO AGREEMENTS */ 
    } 

確保你不重定向到協議頁面,如果你訪問它,如果你不這樣做,你最終會用重定向循環。將示例中的條件更改爲您需要檢查用戶是否嘗試訪問協議頁面的條件。

另外,還要確保你在你的控制器調用parent :: beforeFilter()beforeFilter()調用。如果您不知道如何調用父級方法或如何正確使用它,請閱讀有關phps OOP的信息。 http://php.net/manual/en/language.oop5.php

0

也許在InfopagesController不工作,因爲你忘了加載Cookie的組成部分,因爲你已經在正確完成AgreementController。

在此之後,在你的AppController :: beforeFilter()檢查:

1)什麼是控制器;

2)如果控制器不等於「AgreementController」,然後檢查是否用戶具有該cookie。

您需要檢查是否不等於「AgreementController」否則你創造無限的重定向。