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,則http和https都可以.
例子:
以下為引用的內容: <?php setcookie("TestCookie", value); /* 簡單cookie設置 */ |
設置多個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'; |
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) _COOKIE受magic_quotes_gpc影響,可能自動轉義
3) 使用的時候,有必要測試用戶是否支持cookie
<!--[if !supportLineBreakNewLine]-->
1.5 cookie工作機理:
有些學習者比較衝動,沒心思把原理研究,所以我把它放後面.
a) 伺服器通過隨著響應發送一個http的Set-Cookie頭,在客戶機中設置一個cookie(多個cookie要多個頭).
b) 客戶端自動向伺服器端發送一個http的cookie頭,伺服器接收讀取.
以下為引用的內容: HTTP/1.x 200 OK |
這一行實現了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=/');的結果.
2. PHP的Session
session使用過期時間設為0的cookie,並且將一個稱為session ID的唯一標識符(一長串字符串),在伺服器端同步生成一些session文件(可以自己定義session的保存類型),與用戶機關聯起來.web應用程式存貯與這些session相關的數據,並且讓數據隨著用戶在頁面之間傳遞.
訪問網站的來客會被分配一個唯一的標識符,即所謂的會話 ID。它要麼存放在客戶端的 cookie,要麼經由 URL 傳遞。
會話支持允許用戶註冊任意數目的變量並保留給各個請求使用。當來客訪問網站時,PHP 會自動(如果 session.auto_start 被設為 1)或在用戶請求時(由 session_start() 明確調用或 session_register() 暗中調用)檢查請求中是否發送了特定的會話 ID。如果是,則之前保存的環境就被重建。
2.1 sessionID的傳送