1. 程式人生 > >php中$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的關系和區別

php中$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的關系和區別

one 相同 存取 dev efault light 變量 指定 request

看到REQUEST可以通吃GET 、POST 、COOKIE 後 感覺這個$_REQUEST太強大了
是不是其他的幾個超級變量就沒有用了,下面對他們整體做個比較:

1.安全性 post>get

2.數據傳輸大小 post>get(get最大2000字節)

3.保存到收藏夾 get比較方便.

4.權限大小

首先權限大小跟php.ini文件有關

; This directive determines which super global data (G,P & C) should be
; registered into the super global array REQUEST. If so, it also determines
; the order in which that data is registered. The values for this directive
; are specified in the same manner as the variables_order directive,
; EXCEPT one. Leaving this value empty will cause PHP to use the value set
; in the variables_order directive. It does not mean it will leave the super
; globals array REQUEST empty.
; Default Value: None
; Development Value: "GP"
; Production Value: "GP"
; http://php.net/request-order
request_order = "GP"

  

這裏的意思是:

; 是否將EGPCS變量註冊成為全局變量.
; 如果你不希望由於用戶數據而導致你腳本的全局變量變得淩亂,你需要關閉此選項
; 這個一般隨著 track_vars 打開 - 在這種情況下你能夠通過$HTTP_*_VARS[]存取所有的GPC變量.

這些超全局數據包括G(GET),P(POST),C(COOKIE),E(ENV),S(SERVER)。這條指令同樣指定了這些數據的註冊順序,換句話說GP和PG是不一樣的。註冊的順序是從左至右,即右側的值會覆蓋左側的。比如,當設置為GPC時,COOKIE > POST > GET,依次覆蓋。如果這個項被設置為空,php將會使用指令variables_order的值來指定。

在$_POST[‘name‘] = ‘post‘, $_GET [‘name‘] = ‘get‘ ,setcookie(‘name‘, ‘cookie‘, time()+3600);//先把COOKIE種上,名字為name,值為cookie。然後刷新。(COOKIE要刷新才生效)

上面三個不同的全局變量中鍵名都是相同的

但是print_r($_REQUEST); 後查看結果 ‘cookie‘。

結論:COOKIE的優先級最高。下來POST,最後才是GET

權限大小比較:$_COOKIE > $_POST > $_GET

另外,判斷是post還是get請求的頁面,最好使用:$_SERVER[‘REQUEST_METHOD‘]

php中$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的關系和區別