我想創建一個不需要cookie但仍有會話的應用程序。因此,我創建SessionID並將其與URL一起存入網址。我現在的問題是,HTML幫助程序無法識別這一點,並且輸出的所有鏈接都沒有會話標識。沒有Cookie的CakePHP會話
是否必須告訴CakePHP這麼做或者沒有任何機制? (以每個鏈接的會話ID爲準)
我想創建一個不需要cookie但仍有會話的應用程序。因此,我創建SessionID並將其與URL一起存入網址。我現在的問題是,HTML幫助程序無法識別這一點,並且輸出的所有鏈接都沒有會話標識。沒有Cookie的CakePHP會話
是否必須告訴CakePHP這麼做或者沒有任何機制? (以每個鏈接的會話ID爲準)
這是一個「CakePHP中仍然存在PHP」的情況。就我所知,默認的HtmlHelper並沒有附加任何會話值,因爲Cake支持cookie會話。你可以使用標準的PHP工具來改變它。
首先,你會想要customize the cookie handling。詳情請看這裏:How to bend CakePHP's session handling to your needs。然後,您需要決定是使用PHP's trans-sid
functionality,還是使用SID
constant作爲傳輸會話ID的手段。如果是後者,您可能需要創建一個自定義的AppHelper::url
方法來自動將其包含在每個鏈接中。請參閱此處以解決類似問題:Adding a prefix to every URL in CakePHP。
我只是做在CakePHP中的URL會實現,我設置CakePHP的使用trans_sid,而不是餅乾:
ini_set("session.use_cookies",0);
ini_set("session.use_trans_sid",1);
這也許可以做到使用:http://bakery.cakephp.org/articles/admad/2009/09/02/how-to-bend-cakephp-s-session-handling-to-your-needs 和使用beforefilter讀會話ID形式URL參數,並從該設置會話ID和餅乾,如果會話ID沒有被設置爲URL參數
// Use sid from post
if (!empty($this->params['url']['sid'])) {
$this->Session->id($this->params['url']['sid']);
}
// Or failover to cookie
else
{
$this->Session->id($this->Cookie->read('CAKEPHP'));
}
記住重寫URL功能在AppHelper類
function url($url = null, $full = false) {
return parent::url($url, $full)."/?sid=".session_id();
}
和重定向和閃存中的AppController類
function redirect($url, $status = null, $exit = true) {
$url = $url."?sid=".session_id();
return parent::redirect($url, $status, $exit);
}
function flash($message, $url, $pause = 1, $layout = 'flash') {
$url = $url."?sid=".session_id();
return parent::flash($message, $url, $pause, $layout);
}
非常感謝您! – aiham 2011-05-31 06:47:06