2011-12-29 105 views
2

我有幾個域,我想破壞會話。 我已經創建了一個像這樣的方法:同一會話,不同的域,設置會話ID

用戶登錄在中心位置完成,會話保存在數據庫中。

可以說用戶A想要去abc.com域。我的應用程序將其重定向到他登錄的主身份驗證域。 登錄生成身份驗證令牌後,該令牌將保存在會話表的一個字段中,並返回給abc.com應用程序。

在那裏我使用auth_token從數據庫中獲取session_id,並將abc.com的session_id設置爲相同。

問題是,它總是創建一個新的會話。

這是我的abc.com

$sessionId = // get from the database using the auth_token. 
/* CLOSE PREVIOUS SESSION */ 
      session_destroy(); 

// sets the new id. 
      session_id($sessionId); 

      /** start new session * */ 
      session_start(); 

我缺少的是什麼?代碼 我正在使用PHP與Symfony框架。不知道它是否與symfony會話處理有關。

+0

是同一臺服務器上的域名嗎?這裏有一個鏈接,其中有一個你想要做什麼的例子。看起來你做得對,所以我會說你的框架可能會阻止它。 http://www.gonnalearn.com/2008/04/10/sharing-session-data-across-domains-with-php/ – Robert 2011-12-29 16:58:14

+0

您使用的是什麼版本的symfony?在symfony安裝中是否有2個域名2個應用程序,或者它們的系統是分開的? – MrGlass 2011-12-29 18:20:47

+0

其中一個領域是運行Symfony 1.4和其他Symfony 1.3。是的,域名在同一臺服務器上。 – brpaz 2011-12-30 10:27:34

回答

4

好的。我解決了我的問題。 我不得不在調用session_destroy()後刪除舊的會話cookie。

這裏是我的全部代碼,如果有人感興趣:

$sessionId = // get session id from the database using the auth_token 
session_destroy(); 

$this->getResponse()->setCookie('mycookie',null,time()-3600); 

session_id($sessionId); 

/** start new session * */ 

session_start(); 

$this->getResponse()->setCookie('mycookie', $sessionId,null,null,'mydomain'); 

感謝大家的幫助。