不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦>生活課堂>生活小常識(shí)>

簡述cookie和session的區(qū)別

時(shí)間: 岳彬1043 分享

  在學(xué)習(xí)計(jì)算機(jī)專業(yè)的時(shí)候,我們會(huì)遇到一些課程知識(shí)的問題,那么你知道cookie和session的區(qū)別?下面是學(xué)習(xí)啦小編為你整理的簡述cookie和session的區(qū)別,供大家閱覽!

  簡述cookie與session的區(qū)別

  COOKIE介紹

  cookie 常用于識(shí)別用戶。cookie 是服務(wù)器留在用戶計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過瀏覽器請求頁面時(shí),它同時(shí)會(huì)發(fā)送 cookie。通過 PHP,您能夠創(chuàng)建并取回 cookie 的值。

  1、設(shè)置Cookie

  PHP用SetCookie函數(shù)來設(shè)置Cookie。

  SetCookie函數(shù)定義了一個(gè)Cookie,并且把它附加在HTTP頭的后面,SetCookie函數(shù)的原型如下:

  int SetCookie(string name, string value, int expire, string path, string domain, int secure);

  參數(shù)說明:cookie名稱,cookie值,過期時(shí)間(int),有效路徑,有限域名,https傳遞才有效

  注意:當(dāng)前設(shè)置的Cookie不是立即生效的,而是要等到下一個(gè)頁面時(shí)才能看到.這是由于在設(shè)置的這個(gè)頁面里Cookie由服務(wù)器傳遞給客戶瀏覽器,在下一個(gè)頁面瀏覽器才能把Cookie從客戶的機(jī)器里取出傳回服務(wù)器的原因。

  使用例子:

  普通使用:

  setcookie('name','PHP');

  帶失效時(shí)間的:

  setcookie('name','PHP',time()+24*60*60);//1day

  Cookie是面向路徑的 ,默認(rèn)存儲(chǔ)在當(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è)置一個(gè)名為MyCookier的Cookie,PHP會(huì)自動(dòng)從WEB服務(wù)器接收的HTTP頭里把它分析出來,并形成一個(gè)與普通變量一樣的變量,名為$myCookie,這個(gè)變量的值就是Cookie的值

  3,刪除Cookie

  要?jiǎng)h除一個(gè)已經(jīng)存在的Cookie,有兩個(gè)辦法:

  一是調(diào)用只帶有name參數(shù)的SetCookie,那么名為這個(gè)name的Cookie將被從關(guān)系戶機(jī)上刪掉;例如:setcookie('name','');

  另一個(gè)辦法是設(shè)置Cookie的失效時(shí)間為time()或time()-1,那么這個(gè)Cookie在這個(gè)頁面的瀏覽完之后就被刪除了(其實(shí)是失效了)。 例如:setcookie('name','PHP淮北',time()-24*60*60);

  要注意的是,當(dāng)一個(gè)Cookie被刪除時(shí),它的值在當(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提示錯(cuò)誤);

  不同的瀏覽器對(duì)Cookie的處理機(jī)制不一樣

  cookie限制是在客戶端的。一個(gè)瀏覽器能創(chuàng)建的Cookie數(shù)量最多為30個(gè),并且每個(gè)不能超過4KB,每個(gè)WEB站點(diǎn)能設(shè)置的Cookie總數(shù)不能超過20個(gè)。

  當(dāng)前設(shè)置的Cookie不是立即生效的,而是要等到下一個(gè)頁面時(shí)才能看到

  Session介紹

  session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息,每一個(gè)網(wǎng)站訪客都會(huì)被分配給一個(gè)唯一的標(biāo)志符,即會(huì)話ID,它的存放形式無非兩種:要么經(jīng)過url傳遞,要么保存在客戶端的Cookies里.當(dāng)然,你也可以將Session保存到數(shù)據(jù)庫里,這樣會(huì)更安全,但效率方面會(huì)有所下降.url方式傳遞安全性肯定太差,PHP的會(huì)話機(jī)制是通過設(shè)置Cookie,在Cookie中保存會(huì)話id(Session ID),在服務(wù)器端會(huì)生成session文件,與用戶進(jìn)行關(guān)聯(lián),Web應(yīng)用程序存儲(chǔ)與這些Session相關(guān)的數(shù)據(jù),并在各頁面間進(jìn)行傳遞.

  PHP相關(guān)函數(shù)

  在PHP中有關(guān)Session的函數(shù)比較多,不過我們最常用到的也就這么幾個(gè)函數(shù):

  session_start():啟用session機(jī)制,在需要用到session的程序文件的最開始調(diào)用它.

  session_register():注冊session變量

  session_unregister(): 刪除session變量(一個(gè)一個(gè)刪除)

  session_is_registered(): 判斷session變量是否注冊

  session_distroy(): 銷毀所有session變量(所有session變量銷毀,包括文件)

  需要注意下面幾個(gè)方面:

  1.函數(shù)session_start()必須在程序最開始執(zhí)行,在其前面不能有任何輸出內(nèi)容,否則

  就會(huì)出現(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變量名,在注冊時(shí)一定不要加上"$"符號(hào),只寫其變量名稱即可.

  3.函數(shù)session_unregister()與上面函數(shù)用法完全相同,但功能相反,上面函數(shù)是注冊

  session變量,而其則是刪除指定的session變量.

  4.函數(shù)session_is_registered()用于判斷session變量是否注冊.

  5.函數(shù)session_destroy()主要用于在系統(tǒng)注銷和退出時(shí),銷毀所有的session變量,它沒有參數(shù),直接調(diào)用即可。

  Session與PHP.ini的關(guān)系配置

  1,session.save_handler = file

  用于讀取/回寫session數(shù)據(jù)的方式,默認(rèn)是files。它會(huì)讓PHP的session管理函數(shù)使用指定的文本文件存儲(chǔ)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文件都保存在同一個(gè)目錄中,而是分散在不同目錄。這對(duì)于服務(wù)器處理大量session文件是很有幫助的。(注:目錄需要自己手工創(chuàng)建)

  3,session.auto_start = 0

  如果啟用該選項(xiàng),用戶的每次請求都會(huì)初始化session。不推薦使用,最好通過session_start()顯示地初始化session。

  上圖:左側(cè)是保存在xammp/tmp/下的session文件,內(nèi)容是PHP序列化的格式

  右側(cè):第一行是echo serialize($_SESSION['name']);//序列化

  第二行是打印session值

  *****************其中文件名是session-name,內(nèi)容是PHP序列化的格式

  cookie與session的區(qū)別和關(guān)系

  存儲(chǔ)位置:

  session存儲(chǔ)在服務(wù)器位置上,可以通過php.ini里面配置session相關(guān)配置

  cookie存儲(chǔ)在客戶端上的上(其實(shí)可以分兩種:

  1,持久性cookie,設(shè)置了cookie的時(shí)間,以文件方式存在硬盤上,

  2,會(huì)話cookie,沒有設(shè)置cookie時(shí)間,cookie的生命周期也就是關(guān)閉瀏覽器前就消失,一般不會(huì)保存在硬盤,而是保存在內(nèi)存上)

  cookie和session的關(guān)系

  從上面的圖可以看到:

  cookie通過http報(bào)頭發(fā)送:

  Cookie name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7

  其中PHPSESSID就是關(guān)聯(lián)服務(wù)器session的重要參數(shù)

  再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7

  session_id的生成格式就是:sess_加上一串PHPSESSID的值

  我們可以這樣理解:

  當(dāng)程序需要為某個(gè)客戶端的請求創(chuàng)建一個(gè)session時(shí),服務(wù)器首先檢查這個(gè)客戶端的請求里是否已包含了一個(gè)session標(biāo)識(shí) (稱為session id),如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照session id把這個(gè)session檢索出來 使用(檢索不到,會(huì)新建一個(gè)),如果客戶端請求不包含session id,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相 關(guān)聯(lián)的session id,session id的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個(gè)session id將被在本次響應(yīng) 中返回給客戶端保存。保存這個(gè)session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給 服務(wù)器。一般這個(gè)cookie的名字都是類似于SEEESIONID

  php.ini里面關(guān)于session和cookie有關(guān)的配置

  1,session.use_cookie = 1

  是否采用Cookie方法傳遞session id值。默認(rèn)是1,表示啟用。

  2,session.name = PHPSESSID

  不管是Cookie傳遞sessioin_id,還是GET方法傳遞session_id,都需要使用鍵值。他們的格式分別是Cookie: sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由這里指定的。

  3,session.use_only_cookies = 0

  表示只使用Cookie 的方法傳遞session id。我們說過,傳遞cookie的方法,除了cookie,還有GET方法,GET方法是不安全的方法。在用戶端禁用了cookie的時(shí)候,會(huì)采用GET方法傳遞session_id,可以通過這個(gè)設(shè)置盡用GET方法傳遞session_id。

  4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =

  如果使用Cookie方法傳遞session_id的話,這里分別指定了cookie有效域、目錄和時(shí)間。分別對(duì)應(yīng)setcookie()函數(shù)的形參$expire、$path和$domain。其中cookie_lifetime=0表示直到關(guān)閉瀏覽器才刪除Cookie。還可以使用session_set_cookie_params()函數(shù)修改這些值。

  5,session_name([string $name])

  獲取或更新session_name。如果傳了name,則表示不使用默認(rèn)的名稱PHPSESSID(由session.name)指定,否則獲取當(dāng)前session_name。注意:如果設(shè)置session_name,則必須在session_start()之前調(diào)用才生效。

  6,session_id([string $id])

  與session_name()類似,但它是讀取或者設(shè)置session_id的方法。同樣,設(shè)置session_id的話,必須在session_start()之前調(diào)用才有效。

  7,session_set_cookie_params()和session_get_cookie_params()

  通過session_set_cookie_params()可以重新設(shè)定session.cookie_lifetime, session.cookie_path以及session.cookie_domain這三個(gè)php.ini設(shè)置。而session_get_cookie_params()則是獲取這些設(shè)定的值。

  總結(jié):

  服務(wù)端session的相對(duì)于客戶端的cookie安全性要較高一點(diǎn)

  session在服務(wù)器集群的時(shí)候容易不同步,而cookie不會(huì)

  猜你喜歡:

1.asp與jsp的區(qū)別

2.Java Web工程師筆試題

3.Java Web工程師筆試題

4.2014年計(jì)算機(jī)二級(jí)《WEB》考點(diǎn):HttpServetlResponse

5.最新的搜狐前端面試題目整理

6.JAVA面試題全集

7.web前端工程師面試題及答案

8.關(guān)于《網(wǎng)絡(luò)數(shù)據(jù)庫技術(shù)與應(yīng)用》的介紹

簡述cookie和session的區(qū)別

在學(xué)習(xí)計(jì)算機(jī)專業(yè)的時(shí)候,我們會(huì)遇到一些課程知識(shí)的問題,那么你知道cookie和session的區(qū)別?下面是學(xué)習(xí)啦小編為你整理的簡述cookie和session的區(qū)別,供大家閱覽! 簡述cookie與session的區(qū)別 COOKIE介紹 cookie 常用于識(shí)別用戶。cookie
推薦度:
點(diǎn)擊下載文檔文檔為doc格式
3199227