2010-04-29 36 views
2

我試圖在兩個子域之間共享會話變量的內容,但由於某些原因,它不起作用。

sessionid在兩個子域上都完全相同,但變量不可用。

我可以通過Cookie實現這一點,這是工作,但寧願使用會話中的值。

下面是我如何設置域的會話:

感謝, 斯科特

UPDATE 對不起應該說,我已經使用了以下內容:

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 

if(session_id ==''){session_start();} 

回答

3

您在尋找此功能:session_set_cookie_params()。 假設你有兩個域:

  1. site1.example.com
  2. site2.example.com

爲了這兩個域之間共享會話數據,session_start()之前撥打以下functiontion:

session_set_cookie_params(0, '/', '.example.com');

(編輯:事實上,我忘記在示例代碼的點陣)

+1

這不起作用 – 2010-04-29 12:03:04

+0

@Col。 Shrapnel - 你能否擴展你的評論?我不確定你是否在說我試圖做的事情不會奏效,或者Rodin提供的代碼是不正確的。 – scott 2010-04-29 12:52:34

+0

@scott請參閱http://php.net/setcookie手冊以瞭解正確的域設置。注意點數 – 2010-04-29 13:18:32

-1

SessionID的正是在 兩個子域(..)

你確定會話ID的(沒有名字)是一樣一樣的嗎?

2年前我需要類似的東西,但我需要它在完全不同的虛擬主機上工作(例如,example.com和something.else.net),所以我編寫了一個小腳本,以確保用戶獲得相同的session_id在不同的虛擬主機上。源代碼可在http://www.misc.lv/_downloads_file.php?id=18處獲得,但第58行有小錯誤 - strpos()的參數應該交換(我懶得修復它並上傳固定的腳本)。

基本要求/步驟是:

  1. 所有頁面應該是在同一臺服務器上,因爲他們需要的會話變​​量一個共同的「存儲」;
  2. 必須有一個「主」主機;許多「額外」主機沒有限制;
  3. 如果當前打開的頁面位於「主要主機」上(並且它不是session_id的請求),則不需要執行任何「特殊」操作;
  4. 如果頁面不在「主要主機」上並且存在活動會話,則不需要執行任何「特殊」操作,因爲session_id可能已經被共享;
  5. 如果頁面不在「主要主機」上並且沒有活動會話,則從「主要主機」請求session_id。
+0

是的兩個sessionid值完全相同。 這兩個子域位於同一臺服務器上。 – scott 2010-04-29 13:34:26