簡體   English   中英

在CakePHP中完成的網站上維護兩個不同域之間的會話時出現問題

[英]Problem in maintaining session between two different domains on a website done in CakePHP

正如我之前發布的那樣......我用兩種語言創建了一個網站。 一個是URL www.mainDomain.com (英文),另一個是www.fr.subDomain.com (法文)。

兩者都在CakePHP中完成,用法語我剛剛將它的視圖更改為法語。 但問題是,當任何人登錄英文版本然后切換到法語版本時,會話不會識別它並再次請求登錄。 它已經成為我迄今為止所做的Web應用程序中最大的錯誤。

為此,正如斯旺尼告訴我通過一個鏈接 ,我在我的應用程序上做了它,因為它在鏈接上說。顯然,它適用於登錄兩個域(主域和它的子域)之間的共享會話。 但是當我徹底檢查它時,我發現兩個站點都在從數據庫中拋出最新的新聞,兩個數據都不同。 只是為了檢查我是否錯了,我將一些保存變量更改為會話數組中的數據庫。 但現在它拒絕記住任何事情(會話)。 有誰能告訴我這可能有什么問題,我怎么能解決這個問題...... ???

提前致謝

我不確定我完全明白,但我會試試。 我認為這是關於一個名為session.cookie_domain的PHP設置。

假設您的網站包含以下網址:

您想要的設置是: .example.org

您可以在php.ini.htaccess文件甚至PHP本身中調整它:

<?php ini_set('session.cookie_domain', '.example.org'); ?>

如果您的網站在兩個完全不同的域上運行,例如:

...然后沒有辦法在這兩個不同的域之間共享cookie。

@dooltaz這是一個很好的解決方案。 問題是,蛋糕似乎是​​在我之后設置cookie。 我所做的是向用戶發送重定向方法,然后將cookie設置移動到afterFilter

    function afterFilter() {
    if (!empty($this->params['url']['session_key'])) {
        // Setup variables here...
        setcookie(Configure::read('Session.cookie'), $this->params['url']['session_key'], time()+360000, '/');
        // Cakes cookie method will put your cookie name in [] so it does not work.
    }
}

(還修復了代碼中的拼寫錯誤..)

如果您有兩個不同的域,我建議如下:

在“www.mainDomain.com”上,添加指向“www.fr.subDomain.com”站點的鏈接,並在您的視圖文件中傳遞cookie:

$session_cookie = $_COOKIE[Configure::read('Session.cookie')];
echo $html->link('See French Site', 'http://www.fr.subDomain.com/?session_key='.$session_cookie);

然后在法語網站上添加一些代碼來模仿app_controller.php> beforeFilter()中的cookie。

function beforeFilter() {
    if(!empty($this->params['url']['session_key']) {
        // Setup variables here...
        setcookie(Configure::read('Session.cookie'), $session_cookie, time()+360000, '/', $domain);
        // You could use CAKE's setcookie command here.
    }
}

現在cookie匹配,您將不得不使用數據庫會話或基於蛋糕文件的會話。 閱讀core.php中的說明進行設置。

這應該允許您基本上在各種站點上共享相同的會話。 我實際上正在通過一次登錄在多個站點上實施ACL。 它可能會有點棘手,但只是一步一步地做,你會做得很好。 也不要害怕跳進Cake核心代碼看它是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM