2016-09-18 35 views
0

PHP session data與特定網頁或PHP文件關聯嗎?換句話說,如果一個會話是在foo.php中創建的,它是否可以從bar.php訪問會話數據,假定它們既不引用另一個,也可以直接從Web瀏覽器訪問它們。PHP會話是否與特定文件關聯

如果它是特定於文件的,它如何與include()一起使用?例如,如果foo.php創建了一個會話,那麼包含bar.php,那麼bar.php中的代碼可以訪問會話數據嗎?如果會話創建在bar.php?那麼這些數據是否會特定於bar.phpfoo.php

+1

'sessions'在每個'HTTP request'訪問中,你開始session_start會話。與您所在的文件無關 – DarkBee

+0

http://stackoverflow.com/questions/576535/cookie-path-and-its-accessibility-to-subfolder-pages – JOUM

+0

@JOUM所以PHP會話只與Cookie相關聯(或URL參數)用於標識,而不是用cookie和文件或URL? – laef

回答

2

是的,會話數據在不同的文件和請求之間可用,即會話的整個點:提供HTTP協議沒有的狀態。你可以看看在會議作爲Web服務器上的一個小的存儲您的代碼來存儲數據有限。

如果您foo.php啓動一個會話,然後包括bar.php,在bar.php代碼確實將能夠訪問會話。如果您的bar.php執行session_start(),那麼foo.php可以從此開始訪問會話(所以在include()之後)。

請記住:會話對於特定瀏覽器和易失性來說是唯一的。即:關閉瀏覽器,會話將變爲非活動狀態,無法訪問並過期(通常在30分鐘後)。

注意: - 現代瀏覽器有能力重新連接會話。

+0

請記住,如果您的瀏覽器意外關閉,會話可以恢復。 –

+0

真實的現代瀏覽器有能力重新連接。謝謝。 – kathmann

1

會話數據在php的所有頁面都可用。一般來說,我們在包含在所有文件中的文件(配置文件)中啓動會話(session_start())。

所以,如果你沒有一個共同的文件或不想全局定義,那麼你需要在每個文件中啓動session_start()。

0

我給bar.php或foo.php包含對方的答案。

  • 總是存在沒有被列入,並通過瀏覽器中調用或外殼
  • 所有其他文件都包含在那之後(巫順序是你)
  • 如果你有一個文件時,它第一個文件幾乎就像合併一些代碼塊一樣,沒什麼特別的。一個文件名爲session_start
  • 後的會話存在於PHP
  • 所以,無論文件是現在還是以後包括訪問會話數據
  • 但是,這一次確實session_start將拋出一個通知下一個文件,因爲會話已經啓動
  • 也是一個文件(或更好的在文件中的代碼)可以做session_close和一些其他的東西,打開一個新的會話