2011-02-09 57 views
1

在我的網站上,我想要有幾個子域。爲給定的子域創建上下文的文件存儲在相應的子目錄中。如何將SESSION變量傳遞給父目錄中的頁面?

有時我需要鏈接到不屬於子域的文件。

例如,在我的「subdomain1.mysite.org」上有一個鏈接到「www.mysite.org/login.php」。 「login.php」存儲在包含與子域對應的所有子目錄的目錄中。

如果我以這種方式鏈接到「www.mysite.org/login.php」:href='../login.php',它不起作用。因爲瀏覽器試圖訪問「subdomain1.mysite.org/../login.php」。爲了解決這個問題,我以這種方式建立鏈接:href='http://www.mysite.org/login.php'但我認爲這樣我就不能將我的會話變量傳遞給新頁面(情況如何?)。

所以,我的問題是,我找不到一種方法將會話變量傳遞到位於父目錄(或位於另一個域中的頁面)的頁面。有人知道如何解決這個問題嗎?

ADDED

根據建議,我厭倦了使用session_set_cookie_params來解決問題。但我仍然無法達到預期的效果。在更多的細節我做到以下幾點:

我在index.php文件,對於subdomain1.mysite.org我用下面的代碼生成內容:

session_set_cookie_params(24*60*60,'/','.mysite.org'); 
session_start(); 
$_SESSION['page'] = $PHP_SELF; 

比以後,在同一個文件我做一個鏈接到一個我的網頁(我認爲問題可以在這裏)。我創建了以下方式聯繫:

href='http://www.mysite.org/login.php' 

在login.php中的文件我有以下代碼:

session_set_cookie_params(24*60*60,'/','.mysite.org'); 
session_start(); 
print "a".$_SESSION['page']."b"; 

由於結果之間存在着「A」和「B」沒什麼。所以,我仍然無法將會話變量從一個頁面傳遞到另一個頁面。有人知道我做錯了什麼嗎?

加入2- 我不得不說,如果我添加以下行我的問題就解決了:前

session_set_cookie_params session_name("some_name");

+0

如果你使用cookies,它似乎工作正常。查看http://stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains – GWW

回答

4

在PHP INI中,您可以將會話域設置爲「.mysite.org」,那麼您應該能夠在多個域之間共享會話。相關變量是:

session.cookie_domain

您也可以與session_set_cookie_params()功能設置你的腳本中。

編輯 - 我應該注意到,只有當你的子域位於同一臺服務器上(看起來像是這樣)時,這纔有效。

+0

我認爲可以通過mysql連接使用會話嗎?如果是這樣,那麼也應該支持多臺服務器。 (這只是一個猜測,請告訴我是否錯誤) – xorinzor

+0

@xorinzor問題是瀏覽器默認只會爲www.mysite.org設置cookie。如果您瀏覽到somethingelse.mysite.org,則會話仍然存儲在服務器上並不重要,因爲瀏覽器不會傳遞cookie中的密鑰 – Cfreak

0

你是對的,會議不能以這種方式共享。但是,您可以使用安全cookie跨子域共享用戶數據:

http://us3.php.net/manual/en/function.setcookie.php

確保域參數,當你設置cookie是一樣的東西

".mysite.org" 

然後,你就可以從mysite的任何子域訪問cookie。org

+0

你對使用.mysite.org部分正確,但你可以爲會話設置它。看到我的答案。 – Cfreak

+0

@cfreak - 哇不知道你可以逃脫這個!感謝更新。 – Oliver

相關問題