2011-04-22 72 views
4

我正在做一些關於在php中使用會話的練習。我這樣設置:如何在不同的計算機上訪問php會​​話

$_SESSION['log_users'][] = array(array('Username'=>$username)) 

我試着對它進行試驗。並發現當我使用不同的IP訪問它時,正在生成的會話是不同的。在使用相同的瀏覽器,這是Firefox。

這裏是我做過什麼:

  1. 設置我的路由器,這樣別人就可以訪問我通過使用我的外部IP地址的工作鍛鍊。
  2. 然後我打開了鍛鍊的本地主機版本:

    http://localhost/exercise/sessions.php

  3. 然後使用外部IP地址的一個:

    http://201.xxx.xxx/exercise/sessions.php

  4. 我則填補了session數組在每個瀏覽器標籤上。並且發現這兩者中的每一個保持會話的不同版本。通過使用print_r($_SESSION['log_users'])

發現這真的是應該的行爲方式?有什麼我可以做的,只有一個版本的會話?我目前使用Wampserver 2.1

+0

有辦法解決這個問題,但你很複雜。你確定你需要這個嗎? – 2011-04-22 06:56:34

+0

是的,但如果有替代品可能會更容易。然後我想這樣做。 – user225269 2011-04-22 07:00:17

+0

據我所知,如果不改變每個URL並將會話ID放入其中,就沒有辦法。關於它是如何工作的,請參見http://www.php.net/manual/en/session.idpassing.php – 2011-04-22 07:04:41

回答

4

會話存儲在服務器端和客戶端創建一個會話cookie來識別瀏覽器的當前會話持有當前的會話ID。

會話cookie根據您使用訪問網站的域存儲。

由於您使用的是不同的域,因此您需要創建兩個不同的會話,其中一個是localhost,另一個是ip

當您通過localhost域名訪問的網頁。它將在域localhost上創建會話和存儲會話Cookie。如果您訪問同一域系統上的另一個頁面,將檢查會話cookie是否存在,它會恢復舊會話並且不會創建新會話。

雖然同一時間,如果您通過ip進行訪問,會話cookie不會存儲在這個ip,但系統會假定此用戶沒有活動會話,並且將啓動一個新會話並基於此存儲會話cookie ip

這是怎樣的方式會話工作。

希望這會有所幫助。

2

會話cookie被綁定到一個域名。當你第一次訪問它時,它將被綁定到localhost域。

如果你那麼你的瀏覽器指向201.xx.xx.xx地址,域名將不再匹配。而且你的瀏覽器不會再發送這個cookie。這就是爲什麼會產生一個新的會話。儘管它實際上是同一臺服務器。

0

在你的情況下,只有$ _SESSION不會對你有所幫助。你應該嘗試使用$ _SESSION和數據庫。

您應該同步您的會話和數據庫會話記錄。

系統會檢查您在數據庫中的輸入。如果您有條目可用,那麼它將直接爲您的網站生成會話。這樣,只有一個登錄可用於所有瀏覽器。

相關問題