2012-09-19 99 views
1

好吧,它就在這裏。如何在兩個不同的域中共享PHP會話

我的客戶最近購買了domain1.net的SSL證書。 幾周後,他購買了他認爲更好的domain1.com。

現在,他想使用domain1.com,但我無法將證書從domain1.net移動到domain1.com,因爲時間已過。

因此,客戶導航到domain1.com,當他需要登錄或放置信用卡信息時,我重定向到https://domain1.net。但我需要在這兩個域之間共享PHP $ _SESSION。

我該怎麼做?有任何想法嗎? 謝謝!

+0

會話是域特定的。有醜陋的解決方法,你可以找到使用通常的方法。 – 2012-09-19 20:01:52

+0

你可以使用一個域,原來的域名,但新的domain1.com只需要反映這一點。它可能是domain1.net的框架,但它顯示地址欄中的domain1.com。 – Ozzy

+1

如果重定向登錄到一個不同的域名,它會感到魚腥 - 重定向提前 – johannes

回答

1

您可以將會話數據放入緩存中,這應該可以被兩個域訪問(不確定後臺有多少服務器),然後在重定向發生後從緩存中檢索會話數據。

+1

那麼你最終實施哪個實施? –

0

你真的很不幸運用我想的$ _SESSION功能。問題在於您無法在兩個不同域之間傳遞會話ID Cookie(您可以通過控制Cookie域在兩個子域之間傳遞)。您可以嘗試在查詢字符串中傳遞會話ID,但是誰願意這樣做。

你可以實現你自己的後端邏輯來存儲這兩個域的公共信息,但是我認爲這將需要你自己的令牌系統在域之間來回移動時驗證用戶對會話ID的替換。

您最好的選擇是告訴您的客戶他需要購買.com域名上的證書。無論是他還是他可以爲您創建自己的定製僞會話系統,付出更多的代價。

+0

是的,我認爲最好的方式是告訴我的客戶購買一個新的證書,或使用.net域,重定向.com。 –

0

你不能那樣做,(謝天謝地)。

你必須找到一個其他的方式來交換數據:

  • 也許2點是相同的服務器上,並且可以訪問到一個目錄下。例如/tmp,即默認會話文件也是這樣。
  • 如果不在同一臺服務器上,請使用ftp,http或其他協議交換數據。

當然,最簡單的解決方案是購買一個新證書(每年只需幾美元)併合併網站。

0

這裏有

很長的路要走創建一個PHP文件(share.php)在兩個域下,數據是通過這種方法

<?php session_start(); 
echo json_encode($_SESSION); 
?> 

現在,創建另一個文件,最好使用共享如包括,另一個域用於接收會話數據

<?php session_start(); 
$abc = file_get_contents('http://domain1.com/share.php'); 
$obj = json_decode($abc); 

print_r($obj); 

?> 

的print_r會告訴你這樣的另一臺服務器的整個會話數據。使用對象和數組的組合來訪問所有元素。 如果需要覆蓋此服務器的會話使用這個代碼,而不是print_r的

<?php 

foreach($obj as $key => $value){ 
$_SESSION[$key] = $value; 
} 

?> 
+0

是的,我認爲最好的方法是購買新證書並避免使用這種代碼。 –

0

你需要的會話數據或只是一些登錄信息?無論哪種情況,您都可以序列化$ _SESSION(http://php.net/manual/en/function.serialize.php)或將其存儲在數據庫中。添加一個主鍵和一個可以用rand(0,1000000000)填充的「祕密」字段;

然後,當您鏈接到網站時,傳遞主密鑰和密碼,並使用它從數據庫中獲取會話信息。