2011-05-06 78 views
1

我已經按照有關身份驗證在CakePHP http://www.google.com/url?sa=D&q=http://book.cakephp.org/view/1250/AuthenticationCakePHP的REST Web服務和認證,如何處理

的指導和我也跟着上如何設置REST Web服務指南:http://book.cakephp.org/view/1239/The-Simple-Setup

這也正是我的app_controller:

class AppController extends Controller { 
    var $components = array('DebugKit.Toolbar', 'Session', 'Auth'); 
    var $helpers = array('Html','Javascript', 'Session', 'Ajax', 'Facebook.Facebook'); 

    function beforeFilter() 
    { 
     // importa modello Season 
     $this->Season = ClassRegistry::init('Season'); 

     // ricava la variabile di sessione 
     $id = $this->Session->read('editable_season_id'); 

     // verifica se tale id è esistente 
     $exist = $this->Season->exist($id); 

     // se non esiste o è un valore non valido o è nullo 
     if((is_null($id)) || (!is_numeric($id) || (!$exist))) 
     {  
      // cerca l'id della stagione più recente 
      $id = $this->Season->getLastSeasonId(); 

      // se esiste assegnalo ad una var di sessione 
      if($id) 
      { 
       $this->Session->write("editable_season_id", $id); 
       $title = $this->Season->getSeasonName($id); 
       $this->Session->write("editable_season_title", $title); 
       $this->redirect($this->referer()); 
      } else { // altrimenti lancia errore 
       $seasons = $this->Season->getSeasons(); 
       $this->cakeError('defaultSesonNotFound', array('seasons' => $seasons)); 
      }  
     } 
    } 
} 

現在在每個控制器中,我覆蓋beforeFilter函數,並允許一些操作。例如,我想分享我與大家休息,所以在我的控制器:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('showMatchesBySeasonId', 'matchDetails', 'view'); 
} 

,其中的觀點是我的REST服務的名稱。 我第一次調用VIEW函數時,我將重定向到登錄操作。如果我再次調用VIEW,它將毫無問題地執行並顯示信息,直到名爲「CAKEPHP」的cookie將被存儲在我的計算機中(如果我刷新內存緩存,將會有同樣的問題),這將不會有任何問題。爲什麼?我怎樣才能避免這種行爲?

問候!

回答

0

我注意到會話組件發生類似這樣的問題。嘗試使用Cookie代替。另外,您會注意到我將您的Cookie-> write()鍵設置爲「Season.editable_id」。您可以使用「。」將sesssion/cookie用作多維數組。我發現最好練習,以免覆蓋鍵/值對。