cookie、session、sessionid 与jsessionid
轉(zhuǎn)載自??cookie、session、sessionid 與jsessionid
cookie、session、sessionid 與jsessionid,要想明白他們之間的關(guān)系,下面來看個(gè)有趣的場(chǎng)景來幫你理解。
我們都知道銀行,銀行的收柜臺(tái)每天要接待客戶存款/取款業(yè)務(wù),可以有幾種方案:
憑借柜臺(tái)職員的記憶,由收柜臺(tái)職員來為每位顧客辦理存款/取款業(yè)務(wù),單憑職員的記憶力,要記到每位顧客的相貌,并迅速這個(gè)顧客當(dāng)前的存款以及存取的次數(shù),每次存取的金額是多少。-----------這種方式表示協(xié)議本身支持狀態(tài)。
?????使用存折的方式,然后柜臺(tái)職員就把每個(gè)顧客的存款/取款的信息保存在這張折子,然后交給顧客保管,當(dāng)顧客來存款/取款時(shí),只要拿出存折,職員查看存折就對(duì)當(dāng)前這位顧客的存款/取款信息一目了然。當(dāng)然,你馬上會(huì)想到,顧客修改這個(gè)信息怎么辦?我們也有措施對(duì)每次存款/取款記錄后面蓋章。無蓋章的就是假冒信息。但如果顧客是真的要偽造,當(dāng)然印章也是可以偽造的。-------------這種方式就是在客戶端端保持狀態(tài)。
?
?????使用銀行卡的方式,發(fā)給每位銀行用戶一張銀行卡,銀行卡上有一個(gè)唯一的卡號(hào),沒有其它任何信息,當(dāng)顧客來存款/取款時(shí),拿出銀行卡,銀行把卡號(hào)輸入的電腦,很快就顯示當(dāng)前用戶的存/取款記錄。這種方式的安全性就會(huì)有很大的提高。用戶想要手腳只有攻破銀行的服務(wù)器來修改自己的存/取款信息,這樣做難度會(huì)很大。---------這種方式就是服務(wù)器端保持狀態(tài)。
?
Cookie?與session的產(chǎn)生過程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
我們都知道HTTP協(xié)議本身是無狀態(tài)的,客戶只需要簡(jiǎn)單的向服務(wù)器來發(fā)送請(qǐng)求下載某些文件,客戶端向服務(wù)器端發(fā)送的每次請(qǐng)求都是獨(dú)立的。對(duì)于當(dāng)前的web應(yīng)用,HTTP的“無狀態(tài)”,導(dǎo)致許多應(yīng)用都不得不花費(fèi)大量的精力來記錄用戶的操作步驟。就像我們上面介紹的第一種情況,銀行職員要花費(fèi)大量的精力來記憶每一位用戶的存/取款記錄。
程序員很快發(fā)現(xiàn),如果能夠提供一些按需生成的動(dòng)太信息,會(huì)使web的交互能力大大增強(qiáng)。程序員一方面在HTML中添加表單、腳本、DOM等客戶端行為,來增加web應(yīng)用與客戶端的交互性。另一方面在服務(wù)器端測(cè)出現(xiàn)了CGI規(guī)范以響應(yīng)客戶端的動(dòng)態(tài)請(qǐng)求,作為傳輸載體的HTTP協(xié)議添加了文件上載、cookie?等特性。那cookie的原理與我們上面介紹的使用存折記錄用戶應(yīng)為的方式是一樣一樣的。
通過前面的例子我們已經(jīng)發(fā)現(xiàn),通過cookie的方式存儲(chǔ)信息,可能會(huì)存在一點(diǎn)定的安全性,因?yàn)樗械男畔⒍际菍懺诳蛻舳说?#xff0c;客戶可能會(huì)對(duì)這些信息進(jìn)行修改或清除。然后就又出現(xiàn)session的方式用于保存用戶行為,這種方式的原理與前面介紹銀行卡的方式是一樣的。
具體來說cookie機(jī)制采用的是在客戶端保持狀態(tài)的方案,而session機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案。同時(shí)我們也看到,由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè)標(biāo)識(shí),所以session機(jī)制可能需要借助于cookie機(jī)制來達(dá)到保存標(biāo)識(shí)的目的,但實(shí)際上它還有其他選擇。
?
cookie與session的機(jī)制與原理? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?cookie機(jī)制。正統(tǒng)的cookie分發(fā)是通過擴(kuò)展HTTP協(xié)議來實(shí)現(xiàn)的,服務(wù)器通過在HTTP的響應(yīng)頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應(yīng)的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由瀏覽器按照一定的原則在后臺(tái)自動(dòng)發(fā)送給服務(wù)器的。瀏覽器檢查所有存儲(chǔ)的cookie,如果某個(gè)cookie所聲明的作用范圍大于等于將要請(qǐng)求的資源所在的位置,則把該cookie附在請(qǐng)求資源的HTTP請(qǐng)求頭上發(fā)送給服務(wù)器。
???? cookie的內(nèi)容主要包括:名字,值,過期時(shí)間,路徑和域。路徑與域一起構(gòu)成cookie的作用范圍。若不設(shè)置過期時(shí)間,則表示這個(gè)cookie的生命期為瀏覽器會(huì)話期間,關(guān)閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會(huì)話期的cookie被稱為會(huì)話cookie。會(huì)話cookie一般不存儲(chǔ)在硬盤上而是保存在內(nèi)存里,當(dāng)然這種行為并不是規(guī)范規(guī)定的。若設(shè)置了過期時(shí)間,瀏覽器就會(huì)把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器,這些cookie仍然有效直到超過設(shè)定的過期時(shí)間。存儲(chǔ)在硬盤上的cookie可以在不同的瀏覽器進(jìn)程間共享,比如兩個(gè)IE窗口。而對(duì)于保存在內(nèi)存里的cookie,不同的瀏覽器有不同的處理方式。?
session機(jī)制。session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息。?
當(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)中返回給客戶端保存。
? ? ? ? 保存這個(gè)session?id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)揮給服務(wù)器。一般這個(gè)cookie的名字都是類似于SEEESIONID。但cookie可以被人為的禁止,則必須有其他機(jī)制以便在cookie被禁止時(shí)仍然能夠把session?id傳遞回服務(wù)器。
? ? ? ?經(jīng)常被使用的一種技術(shù)叫做URL重寫,就是把session?id直接附加在URL路徑的后面。還有一種技術(shù)叫做表單隱藏字段。就是服務(wù)器會(huì)自動(dòng)修改表單,添加一個(gè)隱藏字段,以便在表單提交時(shí)能夠把session?id傳遞回服務(wù)器。
?
Jsessionid?
Jsessionid只是tomcat的對(duì)sessionid的叫法,其實(shí)就是sessionid;在其它的容器也許就不叫jsessionid了。
-------------------最新更新--------
?Terry_Huang??回復(fù):?
給你舉個(gè)更生動(dòng)的例子,以前大學(xué)的時(shí)候,經(jīng)常去大卡司去喝奶茶,每喝一杯,都可以得到一個(gè)印花(第一次喝的時(shí)候他會(huì)給你個(gè)積分卡片),集齊6個(gè)印花之后,就可以免費(fèi)獲得一杯奶茶。這樣子,印花的信息是保存在客戶的積分卡上,你如果不懷好意的話,就自己搞幾個(gè)神似的印花去騙奶茶喝吧。哈哈,這樣子是不是更符合在客戶端端保持狀態(tài)。而拿銀行卡去銀行取錢,我們的卡只需要保存一個(gè)卡號(hào),更多的信息是保存在服務(wù)器中,這樣也比較符合服務(wù)器端保持狀態(tài)。希望能幫到你。
? ? 可能是我的描述不夠貼切,積分卡和存折是類似的,用戶的存取信息是保存在存折上的,存折又是在客戶手里(客戶端)可能現(xiàn)在很少有人用存折了,或存折已經(jīng)被銀行取消掉了。
總結(jié)
以上是生活随笔為你收集整理的cookie、session、sessionid 与jsessionid的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建nas不远程访问怎么行?篇五,内网i
- 下一篇: 如何在网络上保护个人隐私电脑隐私如何保护