一般在撰寫 CGI 程式時,必須使用 Set-Cookie 檔頭來建立 cookes,不過 PHP 提供了 setcookie() 函數可以幫我們輕鬆完成這項工作。
setcookie 函數的原型:
int setcookie(string name, string value, int expire, string path, string domain, int secure);
由於 setcookie() 函數只是減輕我們撰寫檔頭的工作,所以 setcookie() 函數使用時和 header() 函數一樣,必須在沒有任何輸出之間呼叫,否則會發生錯誤。
如果 PHP 程式是寫 HTML 裡,則 setcookie() 函數必須寫在 <HTML> 標籤之前。請看底下的範例:
<?php setcookie("username", "Jollen", time()+3600); ?> <html> <head> </head> <body> </body>
由於 cookies 也是屬於 HTTP 的檔頭資訊,因此在 setcookie() 前不能有任何的 字串或 PHP 警告訊息輸出。
這個範例表示我們要設定一個名為 username 的 cookie,該 cookie 的到期時間為 time()+3600,也就是 1 小時後。
setcookie 所接受的參數依序解釋如下:
□ name
cookies 的名稱。
□ value
cookies 的值,可以是字串或數字。
□ expire
cookies 的到期時間,例如:
setcookie("username", "Jollen", time()+3600);
表示 username 這個 cookies 的到期時間為 time()+3600,也就是 1 小時後。
□ path
設定 cookies 在伺服器端所屬的路徑。path 指定只有該目錄下的檔案與其子目錄可以讀取該 cookies。
□ domain
設定 cookies 所屬的網域名稱。指定網域名稱時,不用加上主機名稱,例如:
setcookie("TestCookie",$value,time()+3600,"/~jollen/",".jollen.org",1);
要特別注意,雖然沒有加上主機名稱,可是開頭的小數點不能省略。
□ secure
指定 1 表示該 cookie 只有在 HTTPS 協定下才能傳送。
如果只指定 cookies 的名稱給 setcookie(),表示要刪除該 cookies。例如:
if (isset($UserName)) setcookie("UserName");
傳入參數時,如果要略過某些參數,可以傳入空字串,但 expire 與 secure 則必須傳入 0。例如:
setcookie("user", "Hellen", 0, "", "", 1);
如果我們省略 path 或 domain 參數,setcookie() 會自動我們指定網頁所在的目錄與主機的網域名稱。secure 預設是不使用 HTTPS 傳送。瀏覽器則是根據 path 與 domain 來判斷要送出 cookies 給誰。
--jollen