[英]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.