我已經按照有關身份驗證在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將被存儲在我的計算機中(如果我刷新內存緩存,將會有同樣的問題),這將不會有任何問題。爲什麼?我怎樣才能避免這種行爲?
問候!