PHP cookie和session的分析之cookie篇1

1. PHP的COOKIE

cookie 是一種在遠程瀏覽器端儲存數據並以此來跟蹤和識別用戶的機制。
PHP
http協議的頭信息裏發送cookie, 因此 setcookie() 函數必須在其它信息被輸出到瀏覽器前調用,這和對 header() 函數的限制類似。

1.1
設置cookie:
    
可以用 setcookie() setrawcookie() 函數來設置 cookie。也可以通過向客戶端直接發送http頭來設置.
1.1.1
使用setcookie()函數設置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )
     
name:     cookie
變量名
      value:     cookie
變量的值
      expire:  
有效期結束的時間,
      path:    
有效目錄,
      domain:
有效域名,頂級域唯一
      secure:  
如果值爲1,cookie只能在https連接上有效,如果爲默認值0,httphttps都可以.
例子:
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value); /* 簡單cookie設置 */
setcookie("TestCookie", $value, time()+3600); /* 有效期1個小時 */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); /* 有效目錄 /~rasmus,有效域名example.com及其所有子域名 */
?>

設置多個cookie變量: setcookie('var[a]','value');用數組來表示變量,但他的下標不用引號.這樣就可以用$_COOKIE[‘var’][‘a’]來讀取該COOKIE變量.

1.1.2.
使用header()設置cookie;
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[;...]]");
後面的參數和上面列出setcookie函數的參數一樣.
比如:

$value = 'something from somewhere';
header("Set-Cookie:name=$value");

1.2 Cookie的讀取:

直接用php內置超級全局變量 $_COOKIE就可以讀取瀏覽器端的cookie.
上面例子中設置了cookie"TestCookie",現在我們來讀取:

print $_COOKIE['TestCookie'];

COOKIE是不是被輸出了?!

1.3 刪除cookie
只需把有效時間設爲小於當前時間, 和把值設置爲空.例如:
setcookie("name","",time()-1);
header()類似.

1.4 常見問題解決:

1) 用setcookie()時有錯誤提示,可能是因爲調用setcookie()前面有輸出或空格.也可能你的文檔使從其他字符集轉換過來,文檔後面可能帶有BOM簽名(就是在文件內容添加一些隱藏的BOM字符).解決的辦法就是使你的文檔不出現這種情況.還有通過使用ob_start()函數有也能處理一點.
2) $_COOKIEmagic_quotes_gpc影響,可能自動轉義
3) 使用的時候,有必要測試用戶是否支持cookie
<!--[if !supportLineBreakNewLine]-->

1.5 cookie工作機理:

有些學習者比較衝動,沒心思把原理研究,所以我把它放後面.
a) 服務器通過隨着響應發送一個
httpSet-Cookie,在客戶機中設置一個cookie(多個cookie要多個頭).
b) 客戶端自動向服務器端發送一個httpcookie,服務器接收讀取.

HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie=something from somewhere; path=/
Expires: Thu, 19 Nov 2007 18:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html

這一行實現了cookie功能,收到這行後
Set-Cookie: TestCookie=something from somewhere; path=/
瀏覽器將在客戶端的磁盤上創建一個cookie文件,並在裏面寫入:

TestCookie=something from somewhere;
/

這一行就是我們用setcookie('TestCookie','something from somewhere','/');的結果.也就是用header('Set-Cookie: TestCookie=something from somewhere; path=/');的結果.
<!--[endif]-->

發佈了46 篇原創文章 · 獲贊 8 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章