2012-05-09 61 views
11

我正在使用Cakephp,並且在跨子域維護會話時遇到問題。我的問題是:CakePHP保持從主域到子域的會話

  • 用戶登錄上的「localhost /登錄」
  • 如果驗證他們將被重定向到「customer.localhost /家」。

目前Cake正在爲每個域(例如localhost和customer.localhost)創建一個cookie。 這意味着我無法讓會話爲用戶工作。有沒有辦法讓所有的cookie域固定到父域,目的是保持會話跨子域工作?

我試過在我的引導中輸入這個,但它沒有效果: ini_set('session.cookie_domain','.localhost');

如果您認爲這不能完成,請隨時通知我,以便我可以從這個令人沮喪的問題繼續前進。

非常感謝,

kSeudo

+2

哪個版本的CakePHP您使用的是? 1.3或2.x? –

回答

16

會議:

爲了使會話cookie有效期爲所有子域名和頂級域名,你實際上需要自己設置它在你的APP/config/bootstrap.php文件:

ini_set('session.cookie_domain', '.domain.com'); 

然後,在您的APP/config/core.php f ILE,設置安全性低:

Configure::write('Security.level', 'low'); 

「否則referer_check將被設置爲當前HTTP_HOST在 的CakeSession對象行441」



餅乾:

this page它說明了可以使用 '域' 變量:

允許訪問cookie中的域名。 例如使用'.yourdomain.com'允許您的所有子域名進行訪問。

按他們的示例代碼:

<?php 
public $components = array('Cookie'); 
public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Cookie->name = 'baker_id'; 
    $this->Cookie->time = 3600; // or '1 hour' 
    $this->Cookie->path = '/bakers/preferences/'; 
    $this->Cookie->domain = 'example.com'; 
    $this->Cookie->secure = true; // i.e. only sent if using secure HTTPS 
    $this->Cookie->key = 'qSI232qs*&sXOw!'; 
    $this->Cookie->httpOnly = true; 
} 
+0

感謝您的幫助,我終於得到了它的工作。有一點要記住,不要試圖用'localhost'來做到這一點,確保你在主機中使用一個域名,如'example.com'。 – kSeudo

+0

第一個鏈接已經死了 – tsukimi

+0

@tsukimi謝謝 - 刪除。 – Dave

1

有在app /配置/ core.php中一個配置來改變會話cookie域:

Configure::write('Session', array(
    'defaults' => 'php', 
    'ini' => array(
     'cookie_domain' => '.example.com' 
    ) 
)); 
+0

這不適合我,但接受的答案。 – drmonkeyninja

+0

這有效,但有正確的指令名稱。回答編輯。 – savedario