2010-09-09 85 views
2

我想創建一個不需要cookie但仍有會話的應用程序。因此,我創建SessionID並將其與URL一起存入網址。我現在的問題是,HTML幫助程序無法識別這一點,並且輸出的所有鏈接都沒有會話標識。沒有Cookie的CakePHP會話

是否必須告訴CakePHP這麼做或者沒有任何機制? (以每個鏈接的會話ID爲準)

回答

3

這是一個「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

4

我只是做在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); 
} 
+0

非常感謝您! – aiham 2011-05-31 06:47:06