cookie
摘自: http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html
Cookie是什么? Cookie 是一小段文本信息,伴隨着用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應用程序都可以讀取的信息。
為什么需要Cookie? 因為HTTP協議是無狀態的,對於一個瀏覽器發出的多次請求,WEB服務器無法區分 是不是來源於同一個瀏覽器。所以,需要額外的數據用於維護會話。 Cookie 正是這樣的一段隨HTTP請求一起被傳遞的額外數據。
客戶端檢測
使用瀏覽器端的js語句來檢測,具體思路是,先設置一個cookie, 然后嘗試讀取此cookie,如果讀取不到則表示,瀏覽器不支持此cookie, 如果能夠讀取到, 則表示瀏覽器支持cookie。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="./jquery.js"></script> <link rel="stylesheet" href="./test.css" /> </head> <body> <style> <!-- #template{ background:red; }--> <!-- error --> </style> <div id="template" name="template"> <input type="button" id="testBtn" value="click me"> </div> <script> function SetCookie(name,value)//兩個參數,一個是cookie的名子,一個是值 { var Days = 30; //此 cookie 將被保存 30 天 var exp = new Date(); //new Date("December 31, 9998"); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } function getCookie(name)//取cookies函數 { var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null) return unescape(arr[2]); return null; } function delCookie(name)//刪除cookie { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } //檢測是否支持cookie SetCookie('cookie_test','1'); var cookie_test = getCookie('cookie_test'); if( '1' != cookie_test) { alert('不支持'); } else { alert('支持'); } </script> </body> </html>
服務器端檢測
有時候,例如大多數的網址登陸都需要cookie支持, 如果cookie關閉,則后台登陸功能也應該同步關閉,不允許有請求過去進行強制登陸, 這樣就需要通過一種手段讓服務器知道瀏覽器是否支持cookie。
在http報文中, 沒有特殊的頭域來標識瀏覽器對cookie的支持程度,
可以采用兩次訪問方法解決: 第一次頁面訪問,服務器在響應頭中添加cookie信息, 第二次頁面訪問則會帶有cookie信息(如果瀏覽器支持), 服務器端收到第一次訪問設置的cookie信息,則表示瀏覽器支持cookie。
下面示例代碼,第一次訪問,_TESTCOOKIE為空, 第二次訪問打印出來是1
<?php header("Set-Cookie: _TESTCOOKIE=1"); echo 'Hello _TESTCOOKIE=' . htmlspecialchars($_COOKIE["_TESTCOOKIE"]) . '!'; exit; ?>