2015-10-04 31 views
1

在同一個瀏覽器,而不是在同一個域:

如果在site A,我存儲在會話:

session_start(); 
$_SESSION['fruit'] = "Apple"; 

如果在site B,我存儲在會話:

session_start(); 
$_SESSION['color'] = "green"; 

我怎麼能呼應上site C

// Apple is green. 
session_start(); 
$_SESSION['fruit'].' is '.$_SESSION['color']; 

是否有可能我贊同,從另一個域,但在同一個瀏覽器,所有的$_SESSION變量?

感謝您的幫助。

+0

簡單的答案是'網站A/B/C'之間你的會話ID必須是共享的 – Shehary

+1

號,但更重要的會話數據必須存儲在一些地方,所有這些網站都可以訪問它,就像一個數據庫。 – Federkun

+0

你可能會使用coockies。 – miglio

回答

2

簡短的回答:沒有

龍答:嗯......沒有,但那種肯定的,如果你建立兩個單獨的應用程序,爲每個域,並從一個應用程序通過接口(例如REST端點)發送會話到另一個。

+0

謝謝。出於安全原因,我對99%的肯定是肯定的。我想我會爲此邁出一步。謝謝。 – PacPac

0

Session被限於特定的結構域。所以,你不能以這種方式訪問​​。

+0

這並非總是如此 – Federkun

1

,你可以。

您需要分享site A,site Bsite C左右的會話ID。由於會話ID通常存儲在Cookie中,因此您需要將這些信息傳輸到所有域。

如果site A/B/C同一個網站的所有子域,那麼所有你需要做的是改變session.cookie_domain指令在喜歡你的php.ini文件:

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

有了這個,你可以在多個共享會話ID子域,像A.domain.comB.domain.comC.domain.com,...

哈爾德是做同樣的事情,不同的領域,像A.comB.comC.com,因爲你不能在餅乾轉移,因爲餅乾受「同源」政策限制。你可以做的是做出跨域請求。你可以找到here的一些方法。

現在,您需要爲會話數據的通用存儲。大多數網站使用數據庫來存儲會話值而不是文件,因爲數據庫在多個Web服務器環境中更容易擴展。您可以使用custom session handler來實現數據庫存儲。但是,如果域名全部在同一臺服務器上,則只需設置相同的session_save_path即可。