我不打電話session_start()
而php.ini有session.auto_start = 0
。
我仍然可以分配變量的範圍沒有任何錯誤?沒有設置cookie,但整個頁面範圍仍然可用。如果我沒有開始會話,PHP應該提出錯誤嗎?
我不打電話session_start()
而php.ini有session.auto_start = 0
。
我仍然可以分配變量的範圍沒有任何錯誤?沒有設置cookie,但整個頁面範圍仍然可用。如果我沒有開始會話,PHP應該提出錯誤嗎?
由於$_SESSION是超全球性的,它隨時在所有範圍內都可用。
僅僅因爲會話本身沒有用瀏覽器初始化,並不意味着這個變量不存在。它仍然在等待使用,並且您隨時可以隨時存儲,但我的理解是,如果您寫信給它,然後初始化會話將被清除。
該代碼產生two => Second
預期。
<?php
$_SESSION['test'] = "string";
session_start();
$_SESSION['two'] = "Second";
foreach($_SESSION as $key => $val)
{
print $key . " => " . $val;
print "<br />";
}
?>
,雖然它們在CLI定義可以分配給$argc
和只;您可以分配到$_FILES
,到$_SERVER
,甚至到$GLOBALS
。所有這些都是變量,並且PHP不會阻止您分配新值。由於它是一種動態語言,不需要變量聲明,它不會阻止你初始化變量。但是,如果您在分配任何內容之前嘗試獲取$_SESSION
的值,並且在致電session_start
之前,它會給您'undefined variable' notice
。
無論您是否開始會話,$ _SESSION superglobal始終可用。唯一的區別是,如果您從不在代碼中執行session_start()
,或者沒有通過.ini設置自動啓動會話,則在腳本退出時,放入$ _SESSION的任何內容都將丟失。
這同樣適用於所有超全球植物 - 它們始終可用。有一個$ _POST數組,即使腳本是通過GET查詢調用的,並且還有一個$ _COOKIE數組,即使您在命令行上調用腳本時沒有webserver。
如果你不想讓其他開發者直接訪問'$ _SESSION',那麼你需要用一個實現了'ArrayAccess'的類來重載它,在這個類中你只要在寫入權限時拋出異常就可以會議尚未開始。此外,您可以驗證只有「變量」被設置,哪些名稱受您控制。 – hakre