在網(wǎng)站建設(shè)中,通過setcookie()函數(shù)創(chuàng)建Cookie。使用setcookie()函數(shù)的前提是客戶瀏覽器支持Cookie,如果客戶禁用Cookie,setcookie()將返回false。語法格式如下:
setcookie(name,value,expire,path,domain,secure)
setcookie()函數(shù)向客戶端發(fā)送一個(gè)HTTPcookie。如果成功,則該函數(shù)返回true,否則返回false。setcookie()函數(shù)的參數(shù)說明如表所示。
【示例1】如何設(shè)置并發(fā)送cookie。<?php$value = "my cookie value";//發(fā)送一個(gè)簡(jiǎn)單的 cookiesetcookie("TestCookie",$value);?>
注意:在發(fā)送cookie時(shí),cookie的值會(huì)自動(dòng)進(jìn)行URL編碼。接收時(shí)會(huì)進(jìn)行URL解碼。如果不需要這樣,可以使用setraw-cookie()函數(shù)進(jìn)行代替。
【示例2】設(shè)置一個(gè)24小時(shí)有效期的cookie。
<?php$value = "my cookie value";//發(fā)送一個(gè)24小時(shí)過期的cookiesetcookie("TestCookie",$value, time()+3600*24);?>
如果要把cookie保存為瀏覽器進(jìn)程,即瀏覽器關(guān)閉后就失效。那么可以直接把expiretime設(shè)為0。如:
<?php$value = "my cookie value";//發(fā)送一個(gè)關(guān)閉瀏覽器即失效的cookiesetcookie("TestCookie",$value, 0);?>
參數(shù)path表示W(wǎng)eb服務(wù)器上的目錄,默認(rèn)為被調(diào)用頁面所在目錄,這里還有一點(diǎn)要說明的,如果網(wǎng)站有幾個(gè)不同的目錄,如一個(gè)購(gòu)物目錄、一個(gè)論壇目錄等,那么如果只用不帶路徑的Cookie的話,在一個(gè)目錄下的頁面里設(shè)置的Cookie在另一個(gè)目錄的頁面里是看不到的,也就是說,Cookie是面向路徑的。實(shí)際上,即使沒有指定路徑,Web服務(wù)器會(huì)自動(dòng)傳遞當(dāng)前的路徑給瀏覽器的,指定路徑會(huì)強(qiáng)制服務(wù)器使用設(shè)置的路徑。解決這個(gè)問題的辦法是在調(diào)用setcookie()函數(shù)時(shí)加上路徑和域名,域名的格式可以是
,也可以是“.ph-puser.com”。參數(shù)domain可以使用的域名,默認(rèn)為被調(diào)用頁面的域名。這個(gè)域名必須包含兩個(gè)“.”,所以如果指定頂級(jí)域名,則必須使用“.mydomain.com”。設(shè)定域名后,必須采用該域名訪問網(wǎng)站cookie才有效。如果使用多個(gè)域名訪問該頁,那么這個(gè)地方可以為空或者訪問這個(gè)cookie的域名都是一個(gè)域下面的。
參數(shù)secure如果設(shè)為“1”,表示cookie只能被用戶的瀏覽器認(rèn)為是安全的服務(wù)器所記住。
注意:value、path、domain 3個(gè)參數(shù)可以用空字符串""代換,表示沒有設(shè)置。expire和secure兩個(gè)參數(shù)是數(shù)值型的,可以用0表示。expire參數(shù)是一個(gè)標(biāo)準(zhǔn)的UNIX時(shí)間標(biāo)記,可以用time()或mktime()函數(shù)取得,以秒為單位。secure參數(shù)表示這個(gè)Cookie是否通過加密的HTTPS協(xié)議在網(wǎng)絡(luò)上傳輸。httponly參數(shù)如果設(shè)為1,則表示cookie只能被HTTP協(xié)議所使用,任何腳本語言都不能獲取PHP所創(chuàng)建的cookie,這就有效削弱了來自XSS的攻擊。當(dāng)前設(shè)置的Cookie不是立即生效的,而是要等到下一個(gè)頁面或刷新后才能看到。這是由于在設(shè)置的這個(gè)頁面里Cookie由服務(wù)器傳遞給客戶瀏覽器,在下一個(gè)頁面或刷新后瀏覽器才能把Cookie從客戶的機(jī)器里取出傳回服務(wù)器的原因。