這個(gè)標(biāo)題不是很嚴(yán)格,應(yīng)該說(shuō)可以使用點(diǎn)號(hào)的cookie名,但會(huì)被轉(zhuǎn)換,你命名一個(gè)cookie:
$_COOKIE[‘my.name'] = 1;
實(shí)際上你不能通過(guò)'my.name'在cookie中查找到這個(gè)值,只能是'my_name':
echo $_COOKIE[‘my_name'];
php已經(jīng)自動(dòng)幫你進(jìn)行了轉(zhuǎn)化,句點(diǎn)轉(zhuǎn)為了下劃線。
php為什么要這樣做呢?這是因?yàn)?_GET/$_POST/$_SERVER/$_COOKIE。。。這些全局函數(shù)的值,在之前的許多版本中是可以通過(guò)register_globals參數(shù)在本地中直接訪問(wèn)這些值的,比如開(kāi)啟register_globals = on后,訪問(wèn)$my_name直接取值為1。如果是$my.name的話,則不符合php變量命名原則,這不單是句號(hào)(.)的問(wèn)題。
因此,$_COOKIE的命名已經(jīng)符合php命名標(biāo)準(zhǔn)。
另外開(kāi)啟register_globals是一個(gè)很糟糕的決定,因?yàn)樗赡軙?huì)覆蓋腳本中原來(lái)的值,比如:
// other code
if ($a)
$uc_is_login = true;
// ...
用戶只需要發(fā)送一個(gè)url?a=1的http請(qǐng)求就可以默認(rèn)已經(jīng)登陸。這是個(gè)很危險(xiǎn)的做法,應(yīng)該把它關(guān)閉。實(shí)際上php6已經(jīng)去除了這個(gè)選項(xiàng)。
更多信息請(qǐng)查看IT技術(shù)專欄