2013-04-03 27 views
0

我運行的網站有許多不同的子域。我們正在推出一個使用主域的子域的新下載服務器。我們通常檢查用戶信息的方式是使用跨子域cookie等,但我知道這不會工作,因爲他們的不同的服務器,我想知道什麼是檢查用戶是否登錄等主要服務器上的最佳方式。跨子域和服務器的Cookie - PHP和Apache2

我所想要做的是以下

Sub1.domain.tld =主服務器

當你要下載一個文件,它會指向你到相應的服務器中的文件存儲在哪裏

Sub2.domain.tld =下載服務器

有什麼辦法,以保持或檢查如果用戶登錄請。

我們通常使用cookie翻過子域做到這一點的方法是

setcookie('LoginVariable1', $LoginVariable1, $expiretime, '/', '.domain.tld'); 
setcookie('LoginVariable2', $LoginVariable2, $expiretime, '/', '.domain.tld'); 
+0

例如,最好的方法是通過數據庫或memcache共享服務器之間的會話。 – Maerlyn 2013-04-03 22:34:18

+0

不應該在服務器之間更改Cookie嗎?除非你的意思是會話cookie – jchapa 2013-04-03 22:35:13

+0

Cookie只要是爲頂級域定義的,就存儲在客戶端上,您應該可以訪問它們。當然,您可能使用的是由主服務器動態創建的會話UID。您可以在主服務器上公開一個服務來檢查sessionID cookie是否有效,並從下載服務器調用它。 – NSjonas 2013-04-03 22:38:37

回答

0

跨域的cookie會正好在你的情況下工作。如果您有「www.somedomain.example」和「download.someotherdomain.example」,那麼他們不會工作的唯一情況是,因爲您無法將頂層域「示例」中的cookie定義爲跨域。

因此,這可以歸結爲一個cookie告訴所有服務器像用戶的會話ID或登錄時獲得的身份驗證令牌,然後所有服務器都必須詢問一些中央身份驗證服務此會話或令牌是當前登錄。

+0

當我們將cookies設置爲.domain.tld時,以便任何子域也可以使用此功能,但在嘗試從另一臺服務器讀取該cookie時看起來不起作用 – Christopher 2013-04-03 22:43:31

+0

「似乎不起作用」不是正確的錯誤分析。 'var_dump($ _ COOKIE)'的輸出是什麼?它是否包含您設置的cookie? – Sven 2013-04-03 22:51:56

0

如果子域映射到不同的服務器,您有兩種方法,因爲我看到它。

1)您可以將php會話的目錄共享到服務器A和點服務器B上。

2)您可以使用數據庫會話並將兩臺服務器連接到單個數據庫以驗證/檢索會話。

在這兩種情況下,最終都會有一個存儲會話的中心位置。

+0

關於第1點:php不會在任何地方存儲cookie,客戶端的確如此。 – Maerlyn 2013-04-03 22:36:57

+0

請注意,在使用自己的代碼時,您不應該忘記實施正確的會話鎖定,否則事情將會中斷。 – Sven 2013-04-03 22:36:59

+0

@Maerlyn我說過餅乾並且很快就抓住了它。我的意思是服務器端會話文件通常存儲在臨時目錄中。如果兩臺服務器共享該目錄,那麼理論上兩臺服務器都可以共享會話。 – 2013-04-03 22:38:26