淺談COOKIE和SESSION區(qū)別
一、cookie介紹
cookie 常用于識別用戶。cookie 是服務(wù)器留在用戶計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過瀏覽器請求頁面時,它同時會發(fā)送 cookie。通過 PHP,您能夠創(chuàng)建并取回 cookie 的值。
1、設(shè)置Cookie
PHP用SetCookie函數(shù)來設(shè)置Cookie。
SetCookie函數(shù)定義了一個Cookie,并且把它附加在HTTP頭的后面,SetCookie函數(shù)的原型如下:
int SetCookie(string name, string value, int expire, string path, string domain, int secure);
參數(shù)說明:cookie名稱,cookie值,過期時間(int),有效路徑,有限域名,https傳遞才有效
注意:當(dāng)前設(shè)置的Cookie不是立即生效的,而是要等到下一個頁面時才能看到.這是由于在設(shè)置的這個頁面里Cookie由服務(wù)器傳遞給客戶瀏覽器,在下一個頁面瀏覽器才能把Cookie從客戶的機(jī)器里取出傳回服務(wù)器的原因。
使用例子:
普通使用:
setcookie('name','PHP淮北');
帶失效時間的:
setcookie('name','PHP淮北',time()+24*60*60);//1day
Cookie是面向路徑的 ,默認(rèn)存儲在當(dāng)前文件下,如果沒有設(shè)置路徑,不同文件下的cookie默認(rèn)保存在不同文件夾下,如圖:默認(rèn)保存在mytest文件夾下
2、接收和處理Cookie
用戶端與服務(wù)端的web通信協(xié)議是http。而PHP通過http取得用戶數(shù)據(jù)慣用的三種方法分別是:POST方法、GET方法還有Cookie。而PHP默認(rèn)傳遞方法正是Cookie,也是最佳方法。
比如設(shè)置一個名為MyCookier的Cookie,PHP會自動從WEB服務(wù)器接收的HTTP頭里把它分析出來,并形成一個與普通變量一樣的變量,名為$myCookie,這個變量的值就是Cookie的值
3,刪除Cookie
要刪除一個已經(jīng)存在的Cookie,有兩個辦法:
一是調(diào)用只帶有name參數(shù)的SetCookie,那么名為這個name的Cookie將被從關(guān)系戶機(jī)上刪掉;例如:setcookie('name','');
另一個辦法是設(shè)置Cookie的失效時間為time()或time()-1,那么這個Cookie在這個頁面的瀏覽完之后就被刪除了(其實(shí)是失效了)。 例如:setcookie('name','PHP淮北',time()-24*60*60);
要注意的是,當(dāng)一個Cookie被刪除時,它的值在當(dāng)前頁在仍然有效的。
使用Cookie的注意事項(xiàng):
首先是必須在HTML文件的內(nèi)容輸出之前設(shè)置(Cookie是HTTP協(xié)議頭的一部分,用于瀏覽器和服務(wù)器之間傳遞信息,所以必須在任何屬于HTML文件本身的內(nèi)容輸出之前調(diào)用Cookie函數(shù)。
在PHP頁面可以先使用
ob_start();//開啟
code…..
ob_end_flush(); //刷新緩存
可以防止header提示錯誤);
不同的瀏覽器對Cookie的處理機(jī)制不一樣
cookie限制是在客戶端的。一個瀏覽器能創(chuàng)建的Cookie數(shù)量最多為30個,并且每個不能超過4KB,每個WEB站點(diǎn)能設(shè)置的Cookie總數(shù)不能超過20個。
當(dāng)前設(shè)置的Cookie不是立即生效的,而是要等到下一個頁面時才能看到
二、session介紹
session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息,每一個網(wǎng)站訪客都會被分配給一個唯一的標(biāo)志符,即會話ID,它的存放形式無非兩種:要么經(jīng)過url傳遞,要么保存在客戶端的Cookies里.當(dāng)然,你也可以將Session保存到數(shù)據(jù)庫里,這樣會更安全,但效率方面會有所下降.url方式傳遞安全性肯定太差,PHP的會話機(jī)制是通過設(shè)置Cookie,在Cookie中保存會話id(Session ID),在服務(wù)器端會生成session文件,與用戶進(jìn)行關(guān)聯(lián),Web應(yīng)用程序存儲與這些Session相關(guān)的數(shù)據(jù),并在各頁面間進(jìn)行傳遞.
PHP相關(guān)函數(shù)
在PHP中有關(guān)Session的函數(shù)比較多,不過我們最常用到的也就這么幾個函數(shù):
session_start():啟用session機(jī)制,在需要用到session的程序文件的最開始調(diào)用它.
session_register():注冊session變量
session_unregister(): 刪除session變量(一個一個刪除)
session_is_registered(): 判斷session變量是否注冊
session_distroy(): 銷毀所有session變量(所有session變量銷毀,包括文件)
需要注意下面幾個方面:
1.函數(shù)session_start()必須在程序最開始執(zhí)行,在其前面不能有任何輸出內(nèi)容,否則
就會出現(xiàn)“Warning:Cannot send session cookie - headers already
sent"類似這樣的警告信息.
2.函數(shù)session_register()用于注冊要保存在session中的相關(guān)變量,其用法如下:
<?php
$val = "session value";
session_register("val");
?>
val即為要注冊的session變量名,在注冊時一定不要加上"$"符號,只寫其變量名稱即可.
3.函數(shù)session_unregister()與上面函數(shù)用法完全相同,但功能相反,上面函數(shù)是注冊
session變量,而其則是刪除指定的session變量.
4.函數(shù)session_is_registered()用于判斷session變量是否注冊.
5.函數(shù)session_destroy()主要用于在系統(tǒng)注銷和退出時,銷毀所有的session變量,它沒有參數(shù),直接調(diào)用即可。
Session與PHP.ini的關(guān)系配置
1,session.save_handler = file
用于讀取/回寫session數(shù)據(jù)的方式,默認(rèn)是files。它會讓PHP的session管理函數(shù)使用指定的文本文件存儲session數(shù)據(jù)
2,session.save_path = “/xammp/temp/”
指定保存session文件的目錄,可以指定到別的目錄,但是指定目錄必須要有httpd守護(hù)進(jìn)程屬主(比如apache或www等)寫權(quán)限,否則無法回存session數(shù)據(jù)。它還可以寫成這樣session.save_path = “N;/path” 其中N是整數(shù)。這樣使得不是所有的session文件都保存在同一個目錄中,而是分散在不同目錄。這對于服務(wù)器處理大量session文件是很有幫助的。(注:目錄需要自己手工創(chuàng)建)
3,session.auto_start = 0
如果啟用該選項(xiàng),用戶的每次請求都會初始化session。不推薦使用,最好通過session_start()顯示地初始化session。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
PHP實(shí)現(xiàn)二維數(shù)組按指定的鍵名排序的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組按指定的鍵名排序的方法,這里以數(shù)組記錄三個人信息中的年齡age字段值進(jìn)行排序?yàn)槔?分析了php二維數(shù)組排序的操作技巧,需要的朋友可以參考下2017-08-08
PHP session垃圾回收機(jī)制實(shí)例分析
這篇文章主要介紹了PHP session垃圾回收機(jī)制,簡單分析了session垃圾回收機(jī)制的原理、配置及相關(guān)使用技巧,需要的朋友可以參考下2019-06-06
PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例
這篇文章主要介紹了PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能,結(jié)合具體實(shí)例形式分析了PHP使用 Imagick 擴(kuò)展的圖形處理、生成相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
PHP使用mysql_fetch_row查詢獲得數(shù)據(jù)行列表的方法
這篇文章主要介紹了PHP使用mysql_fetch_row查詢獲得數(shù)據(jù)行列表的方法,涉及php中使用mysql_fetch_row操作數(shù)據(jù)庫的技巧,需要的朋友可以參考下2015-03-03
解析:通過php socket并借助telnet實(shí)現(xiàn)簡單的聊天程序
本篇文章是對通過php socket并借助telnet實(shí)現(xiàn)簡單聊天程序的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

