2013-07-04 18 views
2

我在整個域和子域中打印來自數據庫的已記錄用戶的名稱。session_start();沒有達到其目的

從一個頁面傳遞會話到另一個域我用這完全符合其目的一臺主機的PHP服務器上的功能

session_start(); 

,但它沒有其他主機的應用程序服務器上的工作都。

同樣,從一個頁面傳遞會話到另一個域和我使用的功能子域之間

session_set_cookie_params 

這完全符合其目的一臺主機的PHP服務器上,但它不是工作在所有另一臺主機的應用服務器。其他主機的PHP服務器上

當前會話配置如下:

session.auto_start Off 
session.cookie_path/
session.save_path /tmp 

我用了兩個不同的站點有獨立的主機完全一樣的應用程序。其他主機的應用程序服務器配置出了什麼問題?

實施例:

一頁到另一頁中www.mysite.com本身和www.mysite.com,www.sub1.mysite.com和www.sub2.mysite.com

+0

我可能在這裏錯了方向,但你有檢查PHP的safe_mode選項? –

+0

你想分享php會話:'www.yourapplication.com'到'www.myotherhost.com'?或者你的意思是子域名? 'sub1.domain.com'和'sub2.domain.com' ??? –

+5

在我的理解中,會話僅適用於一個主機。如果你想實現這樣的功能,你將不得不實現一種將會話信息從服務器傳遞到另一個服務器的方式。查看http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language SAML – Bertrand

回答

0

之間通過默認情況下,Cookie只適用於確切的域名匹配。由於PHP會話依賴於這些會話,因此適用相同的規則。

您可以使用session_set_cookie_params或相關的ini配置更改PHP用於會話的設置。

session_set_cookie_params(3600*24, '/', '.mysite.com'); 

請注意域上的前導點以指示應用的所有子域。

+0

我不能像'$ session = session_name(「session」); session_set_cookie_params(3600 * 24,'/','.mysite.com'); session_start();'在文件本身?謝謝, –

+0

我不明白你的後續問題。 –

+0

我的意思是我不能在文件本身而不是ini配置中使用上述代碼塊?順便說一句,什麼是正確的'PHP_INI_ *模式',我可以設置你所建議的條目?謝謝, –