2012-08-06 57 views
2

我已經建立了一個用戶登錄的網站。 現在,由於某種原因,當我從站點的IP和站點的域中輸入時,會創建一個不同的會話。IP和域創建不同的會話

在網站上我使用一個全局參數,命名爲:ROOT其中:

define("HOST", "localhost/final-project-management-system"); 
define("ROOT", "http://".HOST."/"); 

我給很多的網站相關鏈接ROOT

當我嘗試連接到IP時,會創建一個初始會話,但當我移動到涉及ROOT的頁面之一時,會創建一個新會話並刪除舊會話。

有沒有人有任何想法,爲什麼會發生這種情況?

謝謝..

+1

'http:// www.host.com'不等於'http:// host.com'。這很可能是你的問題 – 2012-08-06 22:35:03

回答

6

PHP會話是基於餅乾的範圍,以及你所描述的行爲究竟是如何工作的。

Cookie的範圍僅由基於顯示在瀏覽器地址欄中的主機名(或IP)的字符串值定義。僅僅因爲主機名解析爲特定的IP,並不意味着它們共享cookie。

如果您考慮一下,那麼在考慮共享主機環境時,將Cookie作用域基於已解析的IP地址可能會導致在站點之間發生Cookie泄漏的重大問題。

爲了正確有這個工作,用戶必須通過要麼 DNS名稱的IP地址,但不能同時訪問該站點。你可以手動傳遞會話ID來解決這個問題,但它不會被推薦(不是由我,無論如何)。

0

你試試var_dump()會話?

var_dump($_SESSION); 

啓動在session_start()在PHP的頂部?

1

如果瀏覽器中的URL包含IP地址,並且cookies在瀏覽器中存儲在主機名或其父域中,則Cookie不會作爲請求的一部分發送,可能會導致創建新會話。

最好的做法是在服務器端有一條規則,如果傳入請求包含主機頭,因爲IP地址只是重定向到URL包含主機名/ FQDN的位置。當使用IP地址爲網站提出請求時,Google,Facebook等網站將返回302重定向。