Cookie概念
在瀏覽某些 網(wǎng)站 時(shí),這些網(wǎng)站會(huì)把 一些數(shù)據(jù)存在 客戶端 , 用于使用網(wǎng)站 等跟蹤用戶,實(shí)現(xiàn)用戶自定義 功能.
是否設(shè)置過(guò)期時(shí)間:
如果不設(shè)置過(guò)期時(shí)間,則表示這個(gè)Cookie生命周期為 瀏覽器會(huì)話期間 , 只要關(guān)閉瀏覽器,cookie就消失了.
這個(gè)生命期為瀏覽會(huì)話期的cookie,就是會(huì)話Cookie;
存儲(chǔ):一般保存在內(nèi)存,不在硬盤;
如果設(shè)置了過(guò)期時(shí)間, 瀏覽器會(huì)把cookie保存在硬盤上,關(guān)閉再打開(kāi)瀏覽器, 這些cookie 依然有效直到超過(guò)的設(shè)置過(guò)期時(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ā)送過(guò)去酬屉,那么服務(wù)器還是認(rèn)為你是合法的。所以杂靶,使用 cookie被攻擊的可能性比較大梆惯。
如果設(shè)置了的有效時(shí)間,那么它會(huì)將 cookie保存在客戶端的硬盤上吗垮,下次再訪問(wèn)該網(wǎng)站的時(shí)候垛吗,瀏覽器先檢查有沒(méi)有 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í)間上騙過(guò)瀏覽器,
曾經(jīng)在學(xué)校的vbb論壇上面做過(guò)試驗(yàn)蛮穿,copy別人的 cookie登錄庶骄,冒用了別人的名義發(fā)帖子,完全沒(méi)有問(wèn)題践磅。
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)命令,打開(kāi)Internet選項(xiàng)對(duì)話框,
>在常規(guī)選項(xiàng)卡中單擊刪除Cookie按鈕,在彈出的對(duì)話框中單擊確定按鈕,即可成功刪除全部Cookie文件.
Session的概念
Session 是存放在服務(wù)器端的類似于HashTable結(jié)構(gòu)(每一種web開(kāi)發(fā)技術(shù)的實(shí)現(xiàn)可能不一樣瓢姻,下文直接稱之為HashTable)來(lái)存放用戶數(shù)據(jù);
作用:實(shí)現(xiàn)網(wǎng)頁(yè)之間數(shù)據(jù)傳遞,是一個(gè)存儲(chǔ)在服務(wù)器端的對(duì)象集合音诈。
原理:當(dāng)用戶請(qǐng)求一個(gè)Asp.net頁(yè)面時(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)(也可能就是使用散列表)來(lái)保存信息。
保存:
存儲(chǔ)在Server段的內(nèi)存進(jìn)程中的蹦狂,而這個(gè)進(jìn)程相當(dāng)不穩(wěn)定誓篱,經(jīng)常會(huì)重啟,這樣重啟的話凯楔,就會(huì)造成Session失效窜骄,用戶就必須要重新登錄,用戶體驗(yàn)相當(dāng)差摆屯,比如用戶在填寫(xiě)資料邻遏,快要結(jié)束的時(shí)候Session失效,直接跳到登錄頁(yè)面;
是否已經(jīng)創(chuàng)建過(guò)session:
當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí)虐骑,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)(稱為session id)准验,
如果已包含則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過(guò)session,服務(wù)器就按照session id把這個(gè)session檢索出來(lái)....使用(檢索不到廷没,會(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檢索出來(lái),否則就得 新建一個(gè).)
Session的客戶端實(shí)現(xiàn)形式(即Session ID的保存方法):
一般瀏覽器提供了兩種方式來(lái)保存砰蠢,還有一種是程序員使用html隱藏域的方式自定義實(shí)現(xiàn):
[1] 使用Cookie來(lái)保存,這是最常見(jiàn)的方法唉铜,本文“記住我的登錄狀態(tài)”功能的實(shí)現(xiàn)正式基于這種方式的台舱。
服務(wù)器通過(guò)設(shè)置Cookie的方式將Session ID發(fā)送到瀏覽器。
如果我們不設(shè)置這個(gè)過(guò)期時(shí)間,那么這個(gè)Cookie將不存放在硬盤上竞惋,當(dāng)瀏覽器關(guān)閉的時(shí)候柜去,Cookie就消失了,這個(gè)Session ID就丟失了拆宛。
如果我們?cè)O(shè)置這個(gè)時(shí)間為若干天之后嗓奢,那么這個(gè)Cookie會(huì)保存在客戶端硬盤中,即使瀏覽器關(guān)閉浑厚,這個(gè)值仍然存在股耽,下次訪問(wèn)相應(yīng)網(wǎng)站時(shí),同 樣會(huì)發(fā)送到服務(wù)器上钳幅。
[2] 使用URL附加信息的方式物蝙,也就是像我們經(jīng)常看到JSP網(wǎng)站會(huì)有aaa.jsp?JSESSIONID=*一樣的敢艰。這種方式和第一種方式里面不設(shè)置Cookie過(guò)期時(shí)間是一樣的诬乞。(URL重寫(xiě),就是把session id直接附加在URL路徑的后面钠导。)
[3] 第三種方式是在頁(yè)面表單里面增加隱藏域震嫉,這種方式實(shí)際上和第二種方式一樣,只不過(guò)前者通過(guò)GET方式發(fā)送數(shù)據(jù)牡属,后者使用POST方式發(fā)送數(shù)據(jù)票堵。但是明顯后者比較麻煩。
表單隱藏字段就是服務(wù)器會(huì)自動(dòng)修改表單湃望,添加一個(gè)隱藏字段换衬,以便在表單提交時(shí)能夠把session id傳遞回服務(wù)器。比如:
實(shí)際上這種技術(shù)可以簡(jiǎn)單的用對(duì)action應(yīng)用URL重寫(xiě)來(lái)代替证芭。
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)單的說(shuō)废士,當(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ī)分配的警检,一般來(lái)說(shuō)是不會(huì)有重復(fù),但如果有大量的并發(fā)請(qǐng)求害淤,也不是沒(méi)有重復(fù)的可能性扇雕,我曾經(jīng)就遇到過(guò)一次。
登錄某個(gè)網(wǎng)站窥摄,開(kāi)始顯示的 是自己的信息镶奉,等一段時(shí)間超時(shí)了,一刷新崭放,居然顯示了別人的信息哨苛。
Session是由應(yīng)用服務(wù)器維持的一個(gè)服務(wù)器端的存儲(chǔ)空間,用戶在連接服務(wù)器時(shí)币砂,會(huì)由服務(wù)器生成一個(gè)唯一的SessionID,用該SessionID 為標(biāo)識(shí)符來(lái)存取服務(wù)器端的Session存儲(chǔ)空間移国。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的道伟,用戶提交頁(yè)面時(shí),會(huì)將這一 SessionID提交到服務(wù)器端使碾,來(lái)存取Session數(shù)據(jù)蜜徽。這一過(guò)程,是不用開(kāi)發(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)訪問(wèn)增多,會(huì)比較占用你服務(wù)器的性能考慮到減輕服務(wù)器性能方面物延,應(yīng)當(dāng)使用COOKIE宣旱。
4、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K叛薯,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie浑吟。(Session對(duì)象沒(méi)有對(duì)存儲(chǔ)的數(shù)據(jù)量的限制,其中可以保存更為復(fù)雜的數(shù)據(jù)類型)
注意:
session很容易失效,用戶體驗(yàn)很差;
雖然cookie不安全,但是可以加密;
cookie也分為永久 和暫時(shí)存在的;
瀏覽器 有禁止cookie功能 ,但一般用戶都不會(huì)設(shè)置;
一定要設(shè)置失效時(shí)間,要不然瀏覽器關(guān)閉就消失了;
例如:
記住密碼功能就是使用永久cookie寫(xiě)在客戶端電腦耗溜,下次登錄時(shí)组力,自動(dòng)將cookie信息附加發(fā)送給服務(wù)端。
application是全局性信息抖拴,是所有用戶共享的信息燎字,如可以記錄有多少用戶現(xiàn)在登錄過(guò)本網(wǎng)站,并把該信息展示個(gè)所有用戶。
兩者最大的區(qū)別在于生存周期轩触,一個(gè)是IE啟動(dòng)到IE關(guān)閉.(瀏覽器頁(yè)面一關(guān) ,session就消失了)
一個(gè)是預(yù)先設(shè)置的生存周期寞酿,或永久的保存于本地的文件。(cookie)
來(lái)源https://www.cnblogs.com/yunian/articles/5736066.html