2020-03-20

Cookie & Session


(一)會(huì)話技術(shù)的概述


一奸绷、什么是會(huì)話


? ? 會(huì)話可以簡單理解為维蒙,用戶打開一個(gè)瀏覽器揩魂,點(diǎn)擊多個(gè)超鏈接訪問服務(wù)器的web資源熟吏,然后關(guān)閉瀏覽器,整個(gè)過程稱為是一次會(huì)話


二娶吞、為什么要學(xué)習(xí)會(huì)話


1垒迂、每個(gè)用戶與服務(wù)器進(jìn)行交互過程中,產(chǎn)生一些各自的數(shù)據(jù)妒蛇,程序想要把這些數(shù)據(jù)進(jìn)行保存机断,就需要使用會(huì)話技術(shù)


2、例如:用戶點(diǎn)擊超鏈接購買一個(gè)商品绣夺,程序應(yīng)該保存用戶所購買的商品吏奸,以便于用戶點(diǎn)擊結(jié)賬時(shí),可以得到用戶所購買的商品信息


3陶耍、思考:用戶購買的商品保存在Request或ServletContext中是否可以奋蔚?


答案:無論保存在Request或ServletContext中都不行


(二)會(huì)話技術(shù)的實(shí)現(xiàn)原理


一、會(huì)話技術(shù)分類

1物臂、Cookie技術(shù)

(1)Cookie是客戶端技術(shù)旺拉,程序把每個(gè)用戶的數(shù)據(jù)以cookie的形式保存到各自的瀏覽器中产上,

(2)當(dāng)用戶使用瀏覽器再次訪問服務(wù)器中的Web資源的時(shí)候棵磷,就會(huì)帶著各自的數(shù)據(jù)過去。

(3)這樣Web資源處理的就是用戶各自的數(shù)據(jù)了


2晋涣、Session技術(shù)

(1)Session是服務(wù)器端技術(shù)仪媒,利用這個(gè)技術(shù),服務(wù)器在運(yùn)行時(shí)為每一個(gè)用戶的瀏覽器創(chuàng)建一個(gè)獨(dú)享的Session對象。

(2)由于Session為用戶瀏覽器獨(dú)享算吩,所有用戶在訪問服務(wù)器的時(shí)候留凭,可以把各自的數(shù)據(jù)放在各自的Session中,

(3)當(dāng)用戶再次訪問服務(wù)器中的Web資源的時(shí)候偎巢,其他的Web資源再從用戶各自的Session中取出數(shù)據(jù)蔼夜,為用戶服務(wù)


二、會(huì)話技術(shù)的實(shí)現(xiàn)原理


1压昼、Cookie的實(shí)現(xiàn)原理



2求冷、Session的實(shí)現(xiàn)原理



(三)記錄用戶上次訪問時(shí)間的分析


分析需求和流程



(四)記錄用戶上次訪問時(shí)間的代碼實(shí)現(xiàn)


一、Cookie的簡單使用


1窍霞、獲得從瀏覽器帶過來的Cookie

? ? 通過HttpServletRequest對象中的方法:

?? ??? ?getCookies()


2匠题、向?yàn)g覽器回寫Cookie

? ? 通過HttpServletResponse對象中的方法:

?? ??? ?addCookie(Cookie cookie)


3、Cookie的構(gòu)造

? ??Cookie(String name, String value)


二但金、案例代碼實(shí)現(xiàn)

? ? 創(chuàng)建一個(gè)Web項(xiàng)目

創(chuàng)建包結(jié)構(gòu)


? ? 代碼實(shí)現(xiàn)

?? ?? ? 編寫工具類


?? ?? ? 編寫Servlet



(五)Cookie的分類


一韭山、案例存在問題


問題描述:

? ? 用戶訪問Servlet,記錄用戶的上次訪問時(shí)間冷溃,但是如果用戶將瀏覽器關(guān)閉钱磅,再重新打開瀏覽器訪問程序,程序就會(huì)把其當(dāng)成是第一次訪問的用戶(顯示:您好似枕,歡迎來到本網(wǎng)站)


二续搀、Cookie的分類


1、默認(rèn)級別的Cookie

指的是沒有設(shè)置有效時(shí)間的Cookie菠净,默認(rèn)的情況下禁舷,只要關(guān)閉了瀏覽器,Cookie也會(huì)被銷毀(Cookie存在于瀏覽器的內(nèi)存中毅往,當(dāng)關(guān)閉了瀏覽器牵咙,Cookie就銷毀了)


2、持久級別的Cookie

指的是具有有效時(shí)間的Cookie攀唯,這種Cookie的內(nèi)容不是保存在瀏覽器的內(nèi)存中洁桌,而是將Cookie的內(nèi)容保存(持久化)到硬盤上。當(dāng)關(guān)閉瀏覽器侯嘀,再次打開時(shí)另凌,會(huì)加載硬盤上的文件,從而Cookie中的數(shù)據(jù)就不會(huì)丟失


(六)Cookie的API的概述


一戒幔、構(gòu)造方法

? ? Cookie(String name, String value)

? ? 需要傳入字符串類型的名稱和值


二吠谢、其他的方法

? ? 獲得Cookie的名稱:getName()

? ? 獲得Cookie的值:getValue()

? ? 設(shè)置Cookie的有效域名:setDomain(String domain)

? ? 設(shè)置Cookie的有效路徑:setPath(String uri)

? ? 設(shè)置Cookie的有效時(shí)長:setMaxAge(int expiry)


三、代碼改進(jìn)

案例問題解決



(七)Cookie的使用細(xì)節(jié)


1诗茎、一個(gè)Cookie只能標(biāo)識一種信息工坊,至少含有一個(gè)標(biāo)識該信息的名稱和值(即鍵值對)


2、一個(gè)web站點(diǎn)可以給一個(gè)瀏覽器發(fā)送多個(gè)Cookie,一個(gè)Web瀏覽器也可以存儲(chǔ)多個(gè)Web站點(diǎn)的Cookie


3王污、老版本瀏覽器一般只允許存放300個(gè)Cookie罢吃,每個(gè)站點(diǎn)最多可以存放20個(gè)Cookie,每個(gè)Cookie的大小限制為4KB昭齐,瀏覽器存放的Cookie的大小和個(gè)數(shù)是有限制的


4尿招、如果創(chuàng)建了一個(gè)Cookie,并發(fā)送到瀏覽器阱驾,默認(rèn)情況下泊业,它是一個(gè)會(huì)話級別的Cookie,用戶退出瀏覽器就被刪除了


5啊易、如果希望將這個(gè)Cookie存到磁盤上吁伺,需要設(shè)置有效時(shí)長,就要調(diào)用setMaxAge(int expiry)方法租谈,以秒為單位


6篮奄、需要手動(dòng)刪除持久性Cookie的話,可以將Cookie的有效時(shí)長設(shè)置為0割去,必須注意:刪除Cookie的時(shí)候窟却,path必須一致,否則無法刪除


(八)Session的概述


一呻逆、什么是Session


1夸赫、Session稱為是一次會(huì)話,Cookie將用戶產(chǎn)生的私有的數(shù)據(jù)保存到瀏覽器端咖城,Session將用戶產(chǎn)生的私有的數(shù)據(jù)保存到服務(wù)器端


2茬腿、注意:一個(gè)瀏覽器獨(dú)占一個(gè)Session對象。因此宜雀,在需要保存用戶數(shù)據(jù)的時(shí)候切平,服務(wù)器程序可以將用戶數(shù)據(jù)寫到Session對象中,當(dāng)用戶使用瀏覽器訪問其他程序時(shí)辐董,其他程序可以從用戶的Session中取出該用戶的數(shù)據(jù)悴品,為用戶服務(wù)


二、為什么有Cookie還要有Session


1简烘、Cookie的局限性

Cookie保存的數(shù)據(jù)是有個(gè)數(shù)和大小的限制的

數(shù)據(jù)是保存在客戶端瀏覽器上的(相對不是很安全)


2苔严、Session的優(yōu)勢

Session沒有個(gè)數(shù)和大小的限制

數(shù)據(jù)是保存在服務(wù)器上的(相對比較安全)


三、Session如何保存用戶數(shù)據(jù)

Session對象由服務(wù)器創(chuàng)建孤澎,開發(fā)人員可以調(diào)用request對象的getSession方法得到Session對象




(九)Session的實(shí)現(xiàn)原理


一届氢、Session的實(shí)現(xiàn)原理分析


服務(wù)器是如何實(shí)現(xiàn)一個(gè)Session為一個(gè)用戶瀏覽器服務(wù)的?


二亥至、Session的實(shí)現(xiàn)原理:

? ? 基于Cookie的悼沈,基于Cookie回寫了一個(gè)Session的ID


(十)Session作為域?qū)ο蟠嫒?shù)據(jù)


一、Session作為域?qū)ο蟮腁PI

? ? 向Session中存入數(shù)據(jù)

?? ?? ??setAttribute(String name, Object value)

? ? 從Session域中獲取數(shù)據(jù)

?? ?? ??getAttribute(String name)

?? ?從Session域中移除數(shù)據(jù)

?? ?? ??removeAttribute(String name)


二姐扮、Session作為域?qū)ο蟮淖饔梅秶?/p>

? ? Session作為域?qū)ο笮豕饔梅秶褪且淮螘?huì)話的范圍,一次會(huì)話茶敏,指的是用戶打開瀏覽器壤靶,點(diǎn)擊多個(gè)超鏈接,訪問服務(wù)器資源惊搏,到最后關(guān)閉瀏覽器的過程


(十一)Servlet的域?qū)ο髷?shù)據(jù)訪問范圍的總結(jié)


一贮乳、請求范圍(ServletRequest)

1、何時(shí)創(chuàng)建和銷毀的

? ? 創(chuàng)建:當(dāng)用戶服務(wù)器發(fā)送一次請求恬惯,服務(wù)器創(chuàng)建一個(gè)Request對象

? ? 銷毀:當(dāng)服務(wù)器對這次請求作出了響應(yīng)向拆,服務(wù)器就會(huì)銷毀這個(gè)Request對象


2、如何存取數(shù)據(jù)

? ? 存數(shù)據(jù)

?? ?? ? void setAttribute(String name, Object value);

? ? 取數(shù)據(jù)

?? ?? ? Object getAttribute(String name);


3酪耳、作用范圍

范圍是一次請求(轉(zhuǎn)發(fā)就是一次請求)


二浓恳、會(huì)話范圍(HttpSession)


1、何時(shí)創(chuàng)建和銷毀的

? ? 創(chuàng)建:服務(wù)器端第一次調(diào)用getSession()方法的時(shí)候

? ? 銷毀:三種情況

?? ?? ? Session過期碗暗,默認(rèn)的過期時(shí)間是30分鐘

?? ?? ? 非正常關(guān)閉服務(wù)器(正常關(guān)閉服務(wù)器時(shí)颈将,Session會(huì)被序列化)

?? ?? ? 手動(dòng)調(diào)用session.invalidate()


2、如何存取數(shù)據(jù)

? ? 存數(shù)據(jù)

?? ?? ? void setAttribute(String name, Object value);

? ? 取數(shù)據(jù)

?? ?? ? Object getAttribute(String name);


3言疗、作用范圍

范圍是一次會(huì)話(多次請求)


三晴圾、應(yīng)用范圍(ServletContext)


1、何時(shí)創(chuàng)建和銷毀的

? ? 創(chuàng)建:服務(wù)器啟動(dòng)的時(shí)候就創(chuàng)建了噪奄,會(huì)為每個(gè)Web項(xiàng)目創(chuàng)建一個(gè)單獨(dú)的ServletContext對象

? ? 銷毀:服務(wù)器關(guān)閉的時(shí)候死姚,或者項(xiàng)目人服務(wù)器中移除的時(shí)候


2、如何存取數(shù)據(jù)

? ? 存數(shù)據(jù)

?? ?? ? void setAttribute(String name, Object value);

? ? 取數(shù)據(jù)

?? ?? ? Object getAttribute(String name);


3勤篮、作用范圍

范圍是整個(gè)應(yīng)用的范圍

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末知允,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叙谨,更是在濱河造成了極大的恐慌温鸽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件手负,死亡現(xiàn)場離奇詭異涤垫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竟终,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蝠猬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人统捶,你說我怎么就攤上這事榆芦”猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵匆绣,是天一觀的道長驻右。 經(jīng)常有香客問我,道長崎淳,這世上最難降的妖魔是什么堪夭? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮拣凹,結(jié)果婚禮上森爽,老公的妹妹穿的比我還像新娘。我一直安慰自己嚣镜,他們只是感情好爬迟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菊匿,像睡著了一般雕旨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧请,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天凡涩,我揣著相機(jī)與錄音,去河邊找鬼疹蛉。 笑死活箕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的可款。 我是一名探鬼主播育韩,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闺鲸!你這毒婦竟也來了筋讨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摸恍,失蹤者是張志新(化名)和其女友劉穎悉罕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立镶,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壁袄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了媚媒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗜逻。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缭召,靈堂內(nèi)的尸體忽然破棺而出栈顷,到底是詐尸還是另有隱情逆日,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布萄凤,位于F島的核電站室抽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛙卤。R本人自食惡果不足惜狠半,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一噩死、第九天 我趴在偏房一處隱蔽的房頂上張望颤难。 院中可真熱鬧,春花似錦已维、人聲如沸行嗤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅屏。三九已至,卻和暖如春堂鲜,著一層夾襖步出監(jiān)牢的瞬間栈雳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工缔莲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哥纫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓痴奏,卻偏偏與公主長得像蛀骇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子读拆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容