最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

帶你了解session和cookie作用原理區(qū)別和用法

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:32:46
文檔

帶你了解session和cookie作用原理區(qū)別和用法

帶你了解session和cookie作用原理區(qū)別和用法:Cookie概念 在瀏覽某些 網(wǎng)站時(shí),這些網(wǎng)站會(huì)把一些數(shù)據(jù)存在客戶端,用于使用網(wǎng)站等跟蹤用戶,實(shí)現(xiàn)用戶自定義功能. 是否設(shè)置過期時(shí)間: 如果不設(shè)置 過期時(shí)間,則表示這個(gè) Cookie生命周期為 瀏覽器會(huì)話期間 , 只要關(guān)閉瀏覽器,cookie就消失了. 這個(gè)生命期為瀏覽
推薦度:
導(dǎo)讀帶你了解session和cookie作用原理區(qū)別和用法:Cookie概念 在瀏覽某些 網(wǎng)站時(shí),這些網(wǎng)站會(huì)把一些數(shù)據(jù)存在客戶端,用于使用網(wǎng)站等跟蹤用戶,實(shí)現(xiàn)用戶自定義功能. 是否設(shè)置過期時(shí)間: 如果不設(shè)置 過期時(shí)間,則表示這個(gè) Cookie生命周期為 瀏覽器會(huì)話期間 , 只要關(guān)閉瀏覽器,cookie就消失了. 這個(gè)生命期為瀏覽

Cookie概念

      在瀏覽某些 網(wǎng)站時(shí),這些網(wǎng)站會(huì)把一些數(shù)據(jù)存在客戶端,用于使用網(wǎng)站等跟蹤用戶,實(shí)現(xiàn)用戶自定義功能.

是否設(shè)置過期時(shí)間:

      如果不設(shè)置 過期時(shí)間,則表示這個(gè) Cookie生命周期為 瀏覽器會(huì)話期間 , 只要關(guān)閉瀏覽器,cookie就消失了.
      這個(gè)生命期為瀏覽會(huì)話期的cookie,就是會(huì)話Cookie;

存儲(chǔ):   
      一般保存在內(nèi)存,不在硬盤;
      如果設(shè)置了過期時(shí)間, 瀏覽器會(huì)把cookie保存在硬盤上,關(guān)閉再打開瀏覽器, 這些cookie依然有效直到超過的設(shè)置過期時(shí)間;
      存儲(chǔ)在硬盤上的Cookie可以在不同的瀏覽器進(jìn)程間共享,比如兩個(gè)IE窗口。
      而對(duì)于保存 在內(nèi)存的Cookie,不同的瀏覽器有不同的處理方式。

原理:

     如果瀏覽器使用的是 cookie,那么所有的數(shù)據(jù)都保存在瀏覽器端,
     比如你登錄以后,服務(wù)器設(shè)置了 cookie用戶名(username),那么,當(dāng)你再次請(qǐng)求服務(wù)器的時(shí)候,瀏覽器會(huì)將username一塊發(fā)送給服務(wù)器,這些變量有一定的特殊標(biāo)記。
     服務(wù)器會(huì)解釋為 cookie變量。
     所以只要不關(guān)閉瀏覽器,那么 cookie變量便一直是有效的,所以能夠保證長(zhǎng)時(shí)間不掉線。
     如果你能夠截獲某個(gè)用戶的 cookie變量,然后偽造一個(gè)數(shù)據(jù)包發(fā)送過去,那么服務(wù)器還是認(rèn)為你是合法的。所以使用 cookie被攻擊的可能性比較大。
     如果設(shè)置了的有效時(shí)間,那么它會(huì)將 cookie保存在客戶端的硬盤上,下次再訪問該網(wǎng)站的時(shí)候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發(fā)送給服務(wù)器。
     如果你在機(jī)器上面保存了某個(gè)論壇 cookie,有效期是一年,如果有人入侵你的機(jī)器,將你的 cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網(wǎng)站的時(shí)候就是用你的的身份登錄的。
     所以 cookie是可以偽造的。
     當(dāng)然,偽造的時(shí)候需要主意,直接copy cookie文件到 cookie目錄,瀏覽器是不認(rèn)的,
     他有一個(gè)index.dat文件,存儲(chǔ)了 cookie文件的建立時(shí)間,以及是否有修改,所以你必須先要有該網(wǎng)站的 cookie文件,并且要從保證時(shí)間上騙過瀏覽器,
     曾經(jīng)在學(xué)校的vbb論壇上面做過試驗(yàn),copy別人的 cookie登錄,冒用了別人的名義發(fā)帖子,完全沒有問題。
 
cookie 用法:

 setcookie("user","zy",time()+3600); 設(shè)置user為zy,一小時(shí)之后失效;
 $_COOKIE['user']; 取回user值(名字)
 setcookie("user","",time()-3600); 刪除cookie,第二個(gè)參數(shù)為空,第三個(gè)時(shí)間設(shè)置為小于系統(tǒng)的當(dāng)前時(shí)間即可.

  或在瀏覽器設(shè)置

      在使用Cookie時(shí),Cookie自動(dòng)生成一個(gè)文本文件存儲(chǔ)在IE瀏覽器的Cookie臨時(shí)文件夾中,應(yīng)用瀏覽器刪除Cookie文件的具體操作步驟為
      >選擇IE瀏覽器中的工具/internet選項(xiàng)命令,打開Internet選項(xiàng)對(duì)話框,
      >在常規(guī)選項(xiàng)卡中單擊刪除Cookie按鈕,在彈出的對(duì)話框中單擊確定按鈕,即可成功刪除全部Cookie文件.
 
Session的概念

      Session 是存放在服務(wù)器端的類似于HashTable結(jié)構(gòu)(每一種web開發(fā)技術(shù)的實(shí)現(xiàn)可能不一樣,下文直接稱之為HashTable)來存放用戶數(shù)據(jù);

作用:

      實(shí)現(xiàn)網(wǎng)頁之間數(shù)據(jù)傳遞,是一個(gè)存儲(chǔ)在服務(wù)器端的對(duì)象集合。

原理:

      當(dāng)用戶請(qǐng)求一個(gè)Asp.net頁面時(shí),系統(tǒng)將自動(dòng)創(chuàng)建一個(gè)Session;退出應(yīng)用程序或關(guān)閉服務(wù)器時(shí),該Session撤銷。系統(tǒng)在創(chuàng)建Session時(shí)將為其分配一個(gè)長(zhǎng)長(zhǎng)的字符串標(biāo)識(shí),以實(shí)現(xiàn)對(duì)Session進(jìn)行管理與跟蹤。
      session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息。
      
保存:

      存儲(chǔ)在Server段的內(nèi)存進(jìn)程中的,而這個(gè)進(jìn)程相當(dāng)不穩(wěn)定,經(jīng)常會(huì)重啟,這樣重啟的話,就會(huì)造成Session失效,用戶就必須要重新登錄,用戶體驗(yàn)相當(dāng)差,比如用戶在填寫資料,快要結(jié)束的時(shí)候Session失效,直接跳到登錄頁面;

是否已經(jīng)創(chuàng)建過session:

      當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí),服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)(稱為session id),

      如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照session id把這個(gè)session檢索出來....使用(檢索不到,會(huì)新建一個(gè)),
 
      如果客戶端請(qǐng)求不包含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)中返回給客戶端保存。

     (總結(jié): 創(chuàng)建一個(gè)session時(shí),服務(wù)器看這個(gè)客戶端 是否包含session標(biāo)識(shí), 是的話按照session id把session檢索出來,否則就得 新建一個(gè).)

 Session的客戶端實(shí)現(xiàn)形式(即Session ID的保存方法):

     一般瀏覽器提供了兩種方式來保存,還有一種是程序員使用html隱藏域的方式自定義實(shí)現(xiàn):

     [1] 使用Cookie來保存,這是最常見的方法,本文“記住我的登錄狀態(tài)”功能的實(shí)現(xiàn)正式基于這種方式的。

     服務(wù)器通過設(shè)置Cookie的方式將Session ID發(fā)送到瀏覽器。
 
     如果我們不設(shè)置這個(gè)過期時(shí)間,那么這個(gè)Cookie將不存放在硬盤上,當(dāng)瀏覽器關(guān)閉的時(shí)候,Cookie就消失了,這個(gè)Session ID就丟失了。

     如果我們?cè)O(shè)置這個(gè)時(shí)間為若干天之后,那么這個(gè)Cookie會(huì)保存在客戶端硬盤中,即使瀏覽器關(guān)閉,這個(gè)值仍然存在,下次訪問相應(yīng)網(wǎng)站時(shí),同 樣會(huì)發(fā)送到服務(wù)器上。


     [2] 使用URL附加信息的方式,也就是像我們經(jīng)??吹絁SP網(wǎng)站會(huì)有aaa.jsp?JSESSIONID=*一樣的。這種方式和第一種方式里面不設(shè)置Cookie過期時(shí)間是一樣的。(URL重寫,就是把session id直接附加在URL路徑的后面。)


     [3] 第三種方式是在頁面表單里面增加隱藏域,這種方式實(shí)際上和第二種方式一樣,只不過前者通過GET方式發(fā)送數(shù)據(jù),后者使用POST方式發(fā)送數(shù)據(jù)。但是明顯后者比較麻煩。
     表單隱藏字段就是服務(wù)器會(huì)自動(dòng)修改表單,添加一個(gè)隱藏字段,以便在表單提交時(shí)能夠把session id傳遞回服務(wù)器。比如:
      <form name="testform" action="/xxx">
         <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
         <input type="text">
       </form>
      實(shí)際上這種技術(shù)可以簡(jiǎn)單的用對(duì)action應(yīng)用URL重寫來代替。

session 用法:
        用戶信息保存到session前,先啟動(dòng);
         session_start();                     啟動(dòng)session
         $_SESSION['user']="zy";      設(shè)置用戶名
         unset($_SESSION['user']);    銷毀用戶名
         session_destory();                失去已經(jīng)存儲(chǔ)的session的數(shù)據(jù)

cookie 和session 的區(qū)別:

       1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上.

       簡(jiǎn)單的說,當(dāng)你登錄一個(gè)網(wǎng)站的時(shí)候,如果web服務(wù)器端使用的是session,那么所有的數(shù)據(jù)都保存在服務(wù)器上面,
       客戶端每次請(qǐng)求服務(wù)器的時(shí)候會(huì)發(fā)送 當(dāng)前會(huì)話的session_id,服務(wù)器根據(jù)當(dāng)前session_id判斷相應(yīng)的用戶數(shù)據(jù)標(biāo)志,以確定用戶是否登錄,或具有某種權(quán)限。
       由于數(shù)據(jù)是存儲(chǔ)在服務(wù)器 上面,所以你不能偽造,但是如果你能夠獲取某個(gè)登錄用戶的session_id,用特殊的瀏覽器偽造該用戶的請(qǐng)求也是能夠成功的。
       session_id是服務(wù) 器和客戶端鏈接時(shí)候隨機(jī)分配的,一般來說是不會(huì)有重復(fù),但如果有大量的并發(fā)請(qǐng)求,也不是沒有重復(fù)的可能性,我曾經(jīng)就遇到過一次。
       登錄某個(gè)網(wǎng)站,開始顯示的 是自己的信息,等一段時(shí)間超時(shí)了,一刷新,居然顯示了別人的信息。

       Session是由應(yīng)用服務(wù)器維持的一個(gè)服務(wù)器端的存儲(chǔ)空間,用戶在連接服務(wù)器時(shí),會(huì)由服務(wù)器生成一個(gè)唯一的SessionID,用該SessionID 為標(biāo)識(shí)符來存取服務(wù)器端的Session存儲(chǔ)空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁面時(shí),會(huì)將這一 SessionID提交到服務(wù)器端,來存取Session數(shù)據(jù)。這一過程,是不用開發(fā)人員干預(yù)的。所以一旦客戶端禁用Cookie,那么Session也會(huì)失效。

       2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙考慮到安全應(yīng)當(dāng)使用session。

       3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。

       4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。(Session對(duì)象沒有對(duì)存儲(chǔ)的數(shù)據(jù)量的限制,其中可以保存更為復(fù)雜的數(shù)據(jù)類型)

注意:

      session很容易失效,用戶體驗(yàn)很差;

      雖然cookie不安全,但是可以加密 ;

      cookie也分為永久 和暫時(shí) 存在的;

      瀏覽器 有禁止cookie功能 ,但一般用戶都不會(huì)設(shè)置;

     一定要設(shè)置失效時(shí)間,要不然瀏覽器關(guān)閉就消失了;

 例如:

      記住密碼功能就是使用永久cookie寫在客戶端電腦,下次登錄時(shí),自動(dòng)將cookie信息附加發(fā)送給服務(wù)端。

      application是全局性信息,是所有用戶共享的信息,如可以記錄有多少用戶現(xiàn)在登錄過本網(wǎng)站,并把該信息展示個(gè)所有用戶。

兩者最大的區(qū)別在于生存周期,一個(gè)是IE啟動(dòng)到IE關(guān)閉.(瀏覽器頁面一關(guān) ,session就消失了)
一個(gè)是預(yù)先設(shè)置的生存周期,或永久的保存于本地的文件。(cookie)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

帶你了解session和cookie作用原理區(qū)別和用法

帶你了解session和cookie作用原理區(qū)別和用法:Cookie概念 在瀏覽某些 網(wǎng)站時(shí),這些網(wǎng)站會(huì)把一些數(shù)據(jù)存在客戶端,用于使用網(wǎng)站等跟蹤用戶,實(shí)現(xiàn)用戶自定義功能. 是否設(shè)置過期時(shí)間: 如果不設(shè)置 過期時(shí)間,則表示這個(gè) Cookie生命周期為 瀏覽器會(huì)話期間 , 只要關(guān)閉瀏覽器,cookie就消失了. 這個(gè)生命期為瀏覽
推薦度:
標(biāo)簽: 使用 區(qū)別 作用
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top