萬(wàn)麗華
(江西信息應(yīng)用職業(yè)技術(shù)學(xué)院,江西南昌330043)
在PHP中淺談Cookie與Session
萬(wàn)麗華
(江西信息應(yīng)用職業(yè)技術(shù)學(xué)院,江西南昌330043)
介紹和分析了Cookie和Session兩種瀏覽器的保存方式,并結(jié)合PHP討論兩者的應(yīng)用。
Cookie;Session;PHP;應(yīng)用
“Cookie”在英語(yǔ)中的意思是“小甜餅或小禮物”,大家知道HTTP協(xié)議本身是一種無(wú)狀態(tài)協(xié)議,服務(wù)器單單從網(wǎng)絡(luò)連接上是無(wú)法知道用戶身份的。那么在訪問(wèn)網(wǎng)站時(shí),它是什么概念呢?它意味著服務(wù)器給瀏覽器的“小禮物”,具體可以理解為一張“會(huì)員卡”,當(dāng)你第一次訪問(wèn)網(wǎng)站時(shí),在你自己的瀏覽器中存放了一張”會(huì)員卡”,里面登記了一些信息。憑借此“會(huì)員卡”,只要在有效期內(nèi)使用該瀏覽器再次登錄網(wǎng)站,網(wǎng)站的各個(gè)頁(yè)面都能識(shí)別該“會(huì)員卡”,從而達(dá)到識(shí)別用戶、跟蹤用戶、實(shí)現(xiàn)用戶自定義功能。其中域和路徑屬性標(biāo)識(shí)了這個(gè)“會(huì)員卡”是哪個(gè)網(wǎng)站發(fā)送給瀏覽器的,同時(shí)創(chuàng)建時(shí)間和過(guò)期時(shí)間說(shuō)明了“會(huì)員卡”的有效期,有效期過(guò)后,“會(huì)員卡”就被自動(dòng)刪除。
如果不設(shè)置過(guò)期時(shí)間,則表示這個(gè)“會(huì)員卡”的有效期就只到瀏覽器關(guān)閉的時(shí)候,此時(shí)Cookie被瀏覽器保存在內(nèi)存中。
如果設(shè)置了過(guò)期時(shí)間,Cookie則被瀏覽器保存在硬盤(pán)中,有效期直到過(guò)期時(shí)間為止。存儲(chǔ)在硬盤(pán)的Cookie可以在不同的瀏覽器進(jìn)程中共享。
在PHP中對(duì)Cookie的操作有以下一些內(nèi)容:
1)設(shè)置Cookie
PHP中使用SetCookie函數(shù)來(lái)設(shè)置Cookie,發(fā)放“會(huì)員卡”,使用全局?jǐn)?shù)組$_COOKIE來(lái)保存需要的數(shù)據(jù)。
setcookie(“name”,“value”);
setcookie(“name”,“value”,time()+24*3600);
需要注意的是,設(shè)置的“會(huì)員卡”并不是可以立即使用的,而是需要等到下個(gè)頁(yè)面才可以使用。
2)接收和處理Cookie
echo$_COOKIE[“name”];
3)刪除Cookie
setcookie(“name”);
setcookie(“name”,“”);
setcookie(“name”,“value”,time()-100);
“Cookie”如果理解為瀏覽器保存的一張網(wǎng)站“會(huì)員卡”,要讓網(wǎng)站識(shí)別的話,只需要出示卡片,那么Session就可以理解為瀏覽器上只保存的“會(huì)員卡”“卡號(hào)”,要讓網(wǎng)站識(shí)別的話,只需要告訴網(wǎng)站“卡號(hào)”,網(wǎng)站根據(jù)“卡號(hào)”查找“會(huì)員卡”,從而實(shí)現(xiàn)識(shí)別用戶的目的,這個(gè)“卡號(hào)”就是我們所說(shuō)的Session ID[1]。
這個(gè)Session“會(huì)員卡”在網(wǎng)站服務(wù)器上的保存時(shí)間一般是20min,過(guò)了期限,“會(huì)員卡”會(huì)被銷(xiāo)毀。程序員也可以在其銷(xiāo)毀之前另行存儲(chǔ)。
那么瀏覽器端保存“卡號(hào)”會(huì)有哪些方式呢?
瀏覽器一般提供了兩種保存方式:
1)使用Cookie來(lái)保存,這是最常見(jiàn)的方式。服務(wù)器通過(guò)設(shè)置Cookie將“卡號(hào)”保留到瀏覽器上,下次訪問(wèn)相同的網(wǎng)站時(shí),可以用“卡號(hào)”去標(biāo)識(shí)身份。但是有很多瀏覽器會(huì)禁用Cookie,所以要保存“卡號(hào)”,可以使用第二種方法。
2)使用URL附加信息的方法,比如訪問(wèn)某網(wǎng)站時(shí)會(huì)有xxx。php SESSIONID=xxx,這個(gè)和第一種方式里面不設(shè)置Cookie的過(guò)期時(shí)間是一樣的。
3)還有一種就是通過(guò)在表單中增加隱藏域,這個(gè)方式其實(shí)和第二種是一樣的道理,只不過(guò)URL是通過(guò)GET方式發(fā)送數(shù)據(jù),而這種是采用POST方式發(fā)送數(shù)據(jù),顯然GET方式簡(jiǎn)單的多。
在PHP中對(duì)Session的操作有以下一些內(nèi)容:
1)設(shè)置Session
但凡需要使用Session,都必須使用函數(shù)session_start(),然后可以使用全局?jǐn)?shù)組$_SESSION來(lái)保存需要的數(shù)據(jù)。
session_start();
$_SESSION[“name”]=“value”;
2)接收和處理Session
session_start();
echo$_SESSION[“name”];
3)刪除Session
session_start();
session_unset();
session_destroy();
1)Cookie數(shù)據(jù)是保存在客戶端“—”瀏覽器上的,Session數(shù)據(jù)是保存在服務(wù)器端。
2)Cookie通過(guò)把所有要保存的數(shù)據(jù)通過(guò)HTTP協(xié)議的頭部從客戶端傳遞到服務(wù)端,又從服務(wù)端再傳回到客戶端,所有的數(shù)據(jù)都存儲(chǔ)在客戶端的瀏覽器里,所以這些Cookie數(shù)據(jù)可以被訪問(wèn)到。不僅可以查看Cookie,甚至可以通過(guò)類似于Firecookie這樣的插件添加、修改Cookie,所以Cookie的安全性受到了很大的挑戰(zhàn),只要?jiǎng)e人盜走你的”會(huì)員卡”,那么你會(huì)承受很大損失[2]。
3)Session由于在客戶端保存的是”卡號(hào)”,如果采用Cookie方式保存,而Cookie又容易受到攻擊,所以一旦客戶端禁用了Cookie,那么Session就會(huì)沒(méi)用。所以我們常用的是URL的方式來(lái)傳遞”卡號(hào)”,因此不是完全依賴Cookie。
4)每個(gè)Cookie保存的數(shù)據(jù)大小不能超過(guò)4 K,大部分瀏覽器都限制一個(gè)站點(diǎn)保存的cookie數(shù)最多20個(gè)。
5)Session由于保存在服務(wù)器上,會(huì)比較占用服務(wù)器的性能,如果考慮到減輕服務(wù)器負(fù)擔(dān)的話,可以使用Cookie。
6)一般在使用時(shí),建議將登錄等重要信息存放在Session中,其他信息放在Cookie中。
7)防止header()引發(fā)的Cookie與Session錯(cuò)誤。
[1]柳麗娜.淺淡Session機(jī)制與Cookie機(jī)制[J].電腦編程技巧與維護(hù),2008(16):28-29.
[2]齊紅心.PHP開(kāi)發(fā)過(guò)程中頁(yè)面參數(shù)傳遞方法分析[J].軟件導(dǎo)刊, 2016(1):23-24.
(編輯:王璐)
Discussion of Cookie and Session in PHP
W an Lihua
(Jiangxi Vocational and Technical College of Information Application,Nanchang Jiangxi330043)
This paper introduces and analyzes two ways of browser reservation,including Cookie and Session,and discusses the application of them in combination with PHP.
Cookie;Session;PHP;application
TP393
A
2095-0748(2016)23-0083-02
10.16525/j.cnki.14-1362/n.2016.23.39
2016-11-29
萬(wàn)麗華(1981—),女,江西南昌人,碩士,高職講師,研究方向:網(wǎng)站開(kāi)發(fā),計(jì)算機(jī)網(wǎng)絡(luò)。