2013-01-18 85 views
0

這是我想知道的情景。 比方說,我有以下幾點:PHPSESSID cookie - 是否允許訪問同一服務器上的不同網站?

  1. 運行下面的Web站點的PHP/Apache Web服務器:

    在/ var/WWW/version1ofmyapp/

    在/ var/WWW/version2ofmyapp/

  2. Cookie在用戶的機器上啓用。

  3. Web應用程序在日誌數據寫入會話/註銷

會在登錄到version1ofmysite(從而創建一個名爲PHPSESSID的cookie)給我訪問version2ofmysite? 例如,我登錄到網站的版本1,然後將URL更改爲版本2,它只是讓我進入,就好像我已經被認證一樣。 我想更好地理解爲什麼會發生這種情況。

謝謝。

EDIT 1:

相同域

+4

您的網域如何設置?換句話說,兩個版本共享一個公共域,只有子域發生變化,或者它們完全不同? – diggersworld

+0

這些網站的實際網址是什麼? –

回答

1

甲餅乾爲域定義,並且可以爲一個路徑來定義。所以你可以限制發送一個cookie。

如果您有兩個應用程序中使用的sessionID並使用相同的會話存儲,則可以訪問保存在會話中的信息。

因此,在兩個應用程序中都使用您登錄的信息。您可以更改會話的名稱(http://php.net/manual/en/function.session-name.php)以防止發生此情況,或更改會話存儲(http://php.net/manual/) EN/function.session - 保存 - path.php)

1

在php.ini文件,你可以將服務器配置爲允許這樣的:

session.cookie_domain = ".mydomain.com" 

,將允許cookie的子域訪問。

1

Cookie PHPSESSID僅限於創建它的域,並且只會發送到該域或子域。如果您在同一臺服務器上有多個域,則每個域都會有不同的PHPSESSID Cookie。

如果您使用子域名並且想要在它們之間共享會話,則可以在調用session_start()之前使用session_set_cookie_params($ lifetime_in_seconds,'/','.mydomain.com')以便跨所有用戶共享相同的會話子域。

對cookie的範圍是通過主機名(誤導性稱爲域),然後命名。只有在針對不同域(主機)的情況下,您纔可以擁有兩個名爲PHPSESSID的Cookie。單個域不能有兩個命名相同的cookie。如果您嘗試這樣做,則認爲它已更改爲已設置的設置。

+0

如果我不想分享同一個會話,該怎麼辦? – dot

+0

然後不要調用php_set_cookie_params()。當調用start_session時,域將被設置爲正在創建會話的任何子域的域。示例subdomain1.mydomain.com,這意味着當用戶轉到subdomain2.mydomain.com時,將爲該域創建另一個名爲PHPSESSID的Cookie。在每個cookie中,值將是服務器上不同的會話文件。 –

+0

換句話說,每個子域獲得不同的會話,它們不會被共享。這是默認行爲,如果您不喜歡默認行爲,則需要在其他答案中使用php.ini方法或調用session_set_cookie_params。 –

相關問題