Cookie和Session的作用和工作原理
一、Cookie詳解
(1)簡介
因?yàn)镠TTP協(xié)議是無狀態(tài)的,即服務(wù)器不知道用戶上一次做了什么,這嚴(yán)重阻礙了交互式Web應(yīng)用程序的實(shí)現(xiàn)。在典型的網(wǎng)上購物場景中,用戶瀏覽了幾個(gè)頁面,買了一盒餅干和兩飲料。最后結(jié)帳時(shí),由于HTTP的無狀態(tài)性,不通過額外的手段,服務(wù)器并不知道用戶到底買了什么。為了做到這點(diǎn),就需要使用到Cookie了。服務(wù)器可以設(shè)置或讀取Cookies中包含信息,借此維護(hù)用戶跟服務(wù)器會話中的狀態(tài)。
Cookie(復(fù)數(shù)形態(tài):Cookies),是指某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。
Cookie是由服務(wù)端生成的,發(fā)送給客戶端(通常是瀏覽器)的。Cookie總是保存在客戶端中,按在客戶端中的存儲位置,可分為內(nèi)存Cookie和硬盤Cookie:
內(nèi)存Cookie由瀏覽器維護(hù),保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了,其存在時(shí)間是短暫的。
硬盤Cookie保存在硬盤里,有一個(gè)過期時(shí)間,除非用戶手工清理或到了過期時(shí)間,硬盤Cookie不會被刪除,其存在時(shí)間是長期的。所以,按存在時(shí)間,可分為非持久Cookie和持久Cookie。
(2)工作原理
1、創(chuàng)建Cookie
當(dāng)用戶第一次瀏覽某個(gè)使用Cookie的網(wǎng)站時(shí),該網(wǎng)站的服務(wù)器就進(jìn)行如下工作:
①該用戶生成一個(gè)唯一的識別碼(Cookie id),創(chuàng)建一個(gè)Cookie對象;
②默認(rèn)情況下它是一個(gè)會話級別的cookie,存儲在瀏覽器的內(nèi)存中,用戶退出瀏覽器之后被刪除。如果網(wǎng)站希望瀏覽器將該Cookie存儲在磁盤上,則需要設(shè)置最大時(shí)效(maxAge),并給出一個(gè)以秒為單位的時(shí)間(將最大時(shí)效設(shè)為0則是命令瀏覽器刪除該Cookie);
③將Cookie放入到HTTP響應(yīng)報(bào)頭,將Cookie插入到一個(gè) Set-Cookie HTTP請求報(bào)頭中。
④發(fā)送該HTTP響應(yīng)報(bào)文。
2、設(shè)置存儲Cookie
瀏覽器收到該響應(yīng)報(bào)文之后,根據(jù)報(bào)文頭里的Set-Cookied特殊的指示,生成相應(yīng)的Cookie,保存在客戶端。該Cookie里面記錄著用戶當(dāng)前的信息。
3、發(fā)送Cookie
當(dāng)用戶再次訪問該網(wǎng)站時(shí),瀏覽器首先檢查所有存儲的Cookies,如果某個(gè)存在該網(wǎng)站的Cookie(即該Cookie所聲明的作用范圍大于等于將要請求的資源),則把該cookie附在請求資源的HTTP請求頭上發(fā)送給服務(wù)器。
4、讀取Cookie
?服務(wù)器接收到用戶的HTTP請求報(bào)文之后,從報(bào)文頭獲取到該用戶的Cookie,從里面找到所需要的東西。
(3)作用
Cookie的根本作用就是在客戶端存儲用戶訪問網(wǎng)站的一些信息。典型的應(yīng)用有:
1、記住密碼,下次自動登錄。
2、購物車功能。
3、記錄用戶瀏覽數(shù)據(jù),進(jìn)行商品(廣告)推薦。
(4)缺陷
①Cookie會被附加在每個(gè)HTTP請求中,所以無形中增加了流量。
②由于在HTTP請求中的Cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)
③Cookie的大小限制在4KB左右。對于復(fù)雜的存儲需求來說是不夠用的。
二、Session詳解
(1)簡介
Session代表服務(wù)器與瀏覽器的一次會話過程,這個(gè)過程是連續(xù)的,也可以時(shí)斷時(shí)續(xù)的。Session是一種服務(wù)器端的機(jī)制,Session 對象用來存儲特定用戶會話所需的信息。
Session由服務(wù)端生成,保存在服務(wù)器的內(nèi)存、緩存、硬盤或數(shù)據(jù)庫中。
(2)工作原理
1、創(chuàng)建Session
當(dāng)用戶訪問到一個(gè)服務(wù)器,如果服務(wù)器啟用Session,服務(wù)器就要為該用戶創(chuàng)建一個(gè)SESSION,在創(chuàng)建這個(gè)SESSION的時(shí)候,服務(wù)器首先檢查這個(gè)用戶發(fā)來的請求里是否包含了一個(gè)SESSION ID,如果包含了一個(gè)SESSION ID則說明之前該用戶已經(jīng)登陸過并為此用戶創(chuàng)建過SESSION,那服務(wù)器就按照這個(gè)SESSION ID把這個(gè)SESSION在服務(wù)器的內(nèi)存中查找出來(如果查找不到,就有可能為他新創(chuàng)建一個(gè)),如果客戶端請求里不包含有SESSION ID,則為該客戶端創(chuàng)建一個(gè)SESSION并生成一個(gè)與此SESSION相關(guān)的SESSION ID。這個(gè)SESSION ID是唯一的、不重復(fù)的、不容易找到規(guī)律的字符串,這個(gè)SESSION ID將被在本次響應(yīng)中返回到客戶端保存,而保存這個(gè)SESSION ID的正是COOKIE,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個(gè)標(biāo)識發(fā)送給服務(wù)器。?
2、使用Session
我們知道在IE中,我們可以在工具的Internet選項(xiàng)中把Cookie禁止,那么會不會出現(xiàn)把客戶端的Cookie禁止了,那么SESSIONID就無法再用了呢?找了一些資料說明,可以有其他機(jī)制在COOKIE被禁止時(shí)仍然能夠把Session id傳遞回服務(wù)器。
經(jīng)常被使用的一種技術(shù)叫做URL重寫,就是把Session id直接附加在URL路徑的后面一種是作為URL路徑的附加信息,表現(xiàn)形式為:?
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;?
另一種是作為查詢字符串附加在URL后面,表現(xiàn)形式為:?
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764?
還有一種就是表單隱藏字段。就是服務(wù)器會自動修改表單,添加一個(gè)隱藏字段,以便在表單提交時(shí)能夠把Session id傳遞回服務(wù)器。
(3)作用
Session的根本作用就是在服務(wù)端存儲用戶和服務(wù)器會話的一些信息。典型的應(yīng)用有:
1、判斷用戶是否登錄。
2、購物車功能。
三、Cookie和Session的區(qū)別
1、存放位置不同
Cookie保存在客戶端,Session保存在服務(wù)端。
2 、存取方式的不同
?Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二進(jìn)制數(shù)據(jù),需求先進(jìn)行編碼。Cookie中也不能直接存取Java對象。若要存儲略微復(fù)雜的信息,運(yùn)用Cookie是比擬艱難的。?
而Session中能夠存取任何類型的數(shù)據(jù),包括而不限于String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,對象等,運(yùn)用起來十分便當(dāng)。能夠把Session看做是一個(gè)Java容器類。?
3、安全性(隱私策略)的不同?
Cookie存儲在瀏覽器中,對客戶端是可見的,客戶端的一些程序可能會窺探、復(fù)制以至修正Cookie中的內(nèi)容。而Session存儲在服務(wù)器上,對客戶端是透明的,不存在敏感信息泄露的風(fēng)險(xiǎn)。 假如選用Cookie,比較好的方法是,敏感的信息如賬號密碼等盡量不要寫到Cookie中。最好是像Google、Baidu那樣將Cookie信息加密,提交到服務(wù)器后再進(jìn)行解密,保證Cookie中的信息只要本人能讀得懂。而假如選擇Session就省事多了,反正是放在服務(wù)器上,Session里任何隱私都能夠有效的保護(hù)。?
4、有效期上的不同?
只需要設(shè)置Cookie的過期時(shí)間屬性為一個(gè)很大很大的數(shù)字,Cookie就可以在瀏覽器保存很長時(shí)間。 由于Session依賴于名為JSESSIONID的Cookie,而Cookie JSESSIONID的過期時(shí)間默許為–1,只需關(guān)閉了瀏覽器(一次會話結(jié)束),該Session就會失效。
5、對服務(wù)器造成的壓力不同?
Session是保管在服務(wù)器端的,每個(gè)用戶都會產(chǎn)生一個(gè)Session。假如并發(fā)訪問的用戶十分多,會產(chǎn)生十分多的Session,耗費(fèi)大量的內(nèi)存。而Cookie保管在客戶端,不占用服務(wù)器資源。假如并發(fā)閱讀的用戶十分多,Cookie是很好的選擇。
6、?跨域支持上的不同?
Cookie支持跨域名訪問,例如將domain屬性設(shè)置為“.baidu.com”,則以“.baidu.com”為后綴的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網(wǎng)絡(luò)中。而Session則不會支持跨域名訪問。Session僅在他所在的域名內(nèi)有效。?
參考文獻(xiàn):
1、細(xì)說Cookie?http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html#_label4
2、描述Cookie和Session的作用,區(qū)別和各自的應(yīng)用范圍,cookie、Session工作原理。
http://www.360doc.com/content/11/0706/15/3639038_131844581.shtml
3、深入理解HTTP Session?http://lavasoft.blog.51cto.com/62575/275589/
4、Web應(yīng)用中的Session知多少?http://www.blogjava.net/ohyeah928/archive/2010/01/27/310952.html
5、Cookie和Session的區(qū)別-總結(jié)很好的文章?http://www.lai18.com/content/407204.html
6、Cookie/Session機(jī)制詳解?http://blog.csdn.net/fangaoxin/article/details/6952954
7、老生常談session,cookie的區(qū)別,安全性?http://blog.51yip.com/php/938.html
8、Session和Cookie的區(qū)別及Session的生命周期?http://blog.csdn.net/shuaishenkkk/article/details/8634917
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Cookie和Session的作用和工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个路由器怎么配置成同一网段两个路由器怎
- 下一篇: 经典排序算法(2)——快速排序算法详解