note: PHP Cookie

2010041315:52


語法:

bool setcookie  (  string $name  [,  string $value  [,  int $expire = 0  [,  string $path  [,  string $domain  [,  bool $secure = false  [,  bool $httponly = false  ]]]]]] )

比較特別的參數

expire

=0 表示瀏覽器關閉後,這個 cookie 就會消失
= time()+ $n 這個 cookie 可存活 $n 秒
如 time()+3600 存活 1 小時


path
通常是 "/"
加上不同路徑有好處

例如 做 user用戶確認的 Cookie
setcookie("user", "1", 0, "/cmd", "www.abc.com");
若是
http://www.abc.com/001.php
讀不到 user 這個 Cookie 資料


http://www.abc.com/cmd/002.php
讀的到 user 這個 Cookie 資料

把一些處理資料「寫入」的程式 (或顯示比較敏感訊息的畫面)
都放到 /cmd 目錄下
避免在其它路徑被 XSS 竊取 Cookie



domain
例如:
doamin = .abc.com 則表示這個 Cookie 在所有 *.abc.com 相關的網站中都能被讀、寫 (注意前面有多一個 . )

若指定
doamin = www.abc.com 表示只有 www.abc.com 這個網域下的程式能讀、寫此 Cookie (注意前面沒有 . )

大流量的網站通常會指定 Cookie 的 domain
或是把靜態檔案:圖片、CSS、JS ...放到其它網域中
例如放到 www.abc.net
減少 Header 中 Cookie 資料的流量...

以 Yahoo 來說,一個已登入的用戶,會有 600+ bytes 的 Cookies 資料 ( .yahoo.com 網域)
假設一個畫面中有 10個圖片,每張圖片 (或其它物件、檔案) 都放在 http://xxx.yahoo.com/ 的網域
以一天一百萬頁流量來說,
 600 bytes * 1,000,000 * 10 = 6,000,000,000 = 6,000 MB 的流量
 就是 6G 的「上傳」流量浪費掉

若一天是五百萬頁流量來說
 600 bytes * 6,000,000 * 10 = 30,000,000,000 = 30,000 MB 的流量
 就是 30G 的「上傳」流量浪費掉


secure
Indicates that the cookie should only be transmitted over a secure HTTPS connection from the client.
When set to TRUE, the cookie will only be set if a secure connection exists.
On the server-side, it's on the programmer to send this kind of cookie only on secure connection (e.g. with respect to $_SERVER["HTTPS"]).


httponly
PHP 5.2.0 新增
主要用於減少 XSS 的風險,
IE 6 sp1 之後都有支援
參考 設定 Cookie 時可善用 HttpOnly 特性減低網站安全風險(XSS)


** httponly 並無法防止 cookie 被竊取



另外
在瀏覽器的 FireFox 「書籤工具列」 ( IE 為「我的最愛列」)
新增一個連結,可以隨時看到任一網站所用的 Cookie 資料(有被 httponly 的就看不到了!)
內容為:

javascript:if(document.cookie.length<1){alert('No%20cookie%20for%20this%20site.')}else{alert('Cookie%20for%20this%20site:\n'+document.cookie)}


(ps: 在某個網站抄來了,忘了哪個站了)


Image: Suat Eman / FreeDigitalPhotos.net