昨天

? ? ? ? Cookie & Session



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




一空骚、什么是會話




? ? 會話可以簡單理解為彬犯,用戶打開一個瀏覽器,點擊多個超鏈接訪問服務(wù)器的web資源兰吟,然后關(guān)閉瀏覽器杭跪,整個過程稱為是一次會話




二仙逻、為什么要學(xué)習(xí)會話




1、每個用戶與服務(wù)器進行交互過程中揍魂,產(chǎn)生一些各自的數(shù)據(jù)桨醋,程序想要把這些數(shù)據(jù)進行保存棚瘟,就需要使用會話技術(shù)




2现斋、例如:用戶點擊超鏈接購買一個商品,程序應(yīng)該保存用戶所購買的商品偎蘸,以便于用戶點擊結(jié)賬時庄蹋,可以得到用戶所購買的商品信息




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





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




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




一限书、會話技術(shù)分類


1、Cookie技術(shù)


(1)Cookie是客戶端技術(shù)章咧,程序把每個用戶的數(shù)據(jù)以cookie的形式保存到各自的瀏覽器中倦西,


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


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




2扰柠、Session技術(shù)


(1)Session是服務(wù)器端技術(shù)粉铐,利用這個技術(shù),服務(wù)器在運行時為每一個用戶的瀏覽器創(chuàng)建一個獨享的Session對象卤档。


(2)由于Session為用戶瀏覽器獨享蝙泼,所有用戶在訪問服務(wù)器的時候,可以把各自的數(shù)據(jù)放在各自的Session中劝枣,


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




二舔腾、會話技術(shù)的實現(xiàn)原理




1溪胶、Cookie的實現(xiàn)原理





2、Session的實現(xiàn)原理





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




分析需求和流程





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




一稳诚、Cookie的簡單使用




1载荔、獲得從瀏覽器帶過來的Cookie


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


? ? ? ? getCookies()


2、向瀏覽器回寫Cookie


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


? ? ? ? addCookie(Cookie cookie)


3采桃、Cookie的構(gòu)造


? ? Cookie(String name, String value)


二懒熙、案例代碼實現(xiàn)


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


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





? ? 代碼實現(xiàn)


? ? ? ? 編寫工具類





? ? ? ? 編寫Servlet







(五)Cookie的分類




一、案例存在問題




問題描述:


? ? 用戶訪問Servlet普办,記錄用戶的上次訪問時間工扎,但是如果用戶將瀏覽器關(guān)閉,再重新打開瀏覽器訪問程序衔蹲,程序就會把其當(dāng)成是第一次訪問的用戶(顯示:您好肢娘,歡迎來到本網(wǎng)站)




二、Cookie的分類




1舆驶、默認級別的Cookie


指的是沒有設(shè)置有效時間的Cookie橱健,默認的情況下,只要關(guān)閉了瀏覽器沙廉,Cookie也會被銷毀(Cookie存在于瀏覽器的內(nèi)存中拘荡,當(dāng)關(guān)閉了瀏覽器,Cookie就銷毀了)




2撬陵、持久級別的Cookie


指的是具有有效時間的Cookie珊皿,這種Cookie的內(nèi)容不是保存在瀏覽器的內(nèi)存中,而是將Cookie的內(nèi)容保存(持久化)到硬盤上巨税。當(dāng)關(guān)閉瀏覽器蟋定,再次打開時,會加載硬盤上的文件草添,從而Cookie中的數(shù)據(jù)就不會丟失




(六)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的有效時長:setMaxAge(int expiry)




三、代碼改進


案例問題解決







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




1抄淑、一個Cookie只能標(biāo)識一種信息犀盟,至少含有一個標(biāo)識該信息的名稱和值(即鍵值對)




2、一個web站點可以給一個瀏覽器發(fā)送多個Cookie蝇狼,一個Web瀏覽器也可以存儲多個Web站點的Cookie




3阅畴、老版本瀏覽器一般只允許存放300個Cookie,每個站點最多可以存放20個Cookie迅耘,每個Cookie的大小限制為4KB贱枣,瀏覽器存放的Cookie的大小和個數(shù)是有限制的




4、如果創(chuàng)建了一個Cookie颤专,并發(fā)送到瀏覽器纽哥,默認情況下,它是一個會話級別的Cookie栖秕,用戶退出瀏覽器就被刪除了




5春塌、如果希望將這個Cookie存到磁盤上,需要設(shè)置有效時長簇捍,就要調(diào)用setMaxAge(int expiry)方法只壳,以秒為單位




6、需要手動刪除持久性Cookie的話暑塑,可以將Cookie的有效時長設(shè)置為0吼句,必須注意:刪除Cookie的時候,path必須一致事格,否則無法刪除




(八)Session的概述




一惕艳、什么是Session




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




2、注意:一個瀏覽器獨占一個Session對象逢捺。因此谁鳍,在需要保存用戶數(shù)據(jù)的時候,服務(wù)器程序可以將用戶數(shù)據(jù)寫到Session對象中蒸甜,當(dāng)用戶使用瀏覽器訪問其他程序時棠耕,其他程序可以從用戶的Session中取出該用戶的數(shù)據(jù),為用戶服務(wù)




二柠新、為什么有Cookie還要有Session




1、Cookie的局限性


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


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




2辉巡、Session的優(yōu)勢


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


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




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


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









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




一、Session的實現(xiàn)原理分析




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





二瓤荔、Session的實現(xiàn)原理:


? ? 基于Cookie的,基于Cookie回寫了一個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ū)ο螅饔梅秶褪且淮螘挼姆秶堂危淮螘挼惆眩傅氖怯脩舸蜷_瀏覽器,點擊多個超鏈接屿附,訪問服務(wù)器資源郎逃,到最后關(guān)閉瀏覽器的過程




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




一、請求范圍(ServletRequest)


1挺份、何時創(chuàng)建和銷毀的


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


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




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


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


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


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


? ? ? ? Object getAttribute(String name);




3优训、作用范圍


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




二、會話范圍(HttpSession)




1各聘、何時創(chuàng)建和銷毀的


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


? ? 銷毀:三種情況


? ? ? ? Session過期型宙,默認的過期時間是30分鐘


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


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




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


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


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


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


? ? ? ? Object getAttribute(String name);




3妆兑、作用范圍


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




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




1毛仪、何時創(chuàng)建和銷毀的


? ? 創(chuàng)建:服務(wù)器啟動的時候就創(chuàng)建了搁嗓,會為每個Web項目創(chuàng)建一個單獨的ServletContext對象


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




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


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


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


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


? ? ? ? Object getAttribute(String name);




3腺逛、作用范圍


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



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衡怀,隨后出現(xiàn)的幾起案子棍矛,更是在濱河造成了極大的恐慌,老刑警劉巖抛杨,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件够委,死亡現(xiàn)場離奇詭異,居然都是意外死亡怖现,警方通過查閱死者的電腦和手機茁帽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門玉罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人潘拨,你說我怎么就攤上這事吊输。” “怎么了铁追?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵季蚂,是天一觀的道長。 經(jīng)常有香客問我琅束,道長扭屁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任狰闪,我火速辦了婚禮疯搅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埋泵。我一直安慰自己幔欧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布丽声。 她就那樣靜靜地躺著礁蔗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雁社。 梳的紋絲不亂的頭發(fā)上浴井,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音霉撵,去河邊找鬼磺浙。 笑死,一個胖子當(dāng)著我的面吹牛徒坡,可吹牛的內(nèi)容都是我干的撕氧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喇完,長吁一口氣:“原來是場噩夢啊……” “哼伦泥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锦溪,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤不脯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刻诊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體防楷,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年坏逢,在試婚紗的時候發(fā)現(xiàn)自己被綠了域帐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赘被。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡是整,死狀恐怖肖揣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浮入,我是刑警寧澤龙优,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站事秀,受9級特大地震影響彤断,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜易迹,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一宰衙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睹欲,春花似錦供炼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闸衫,卻和暖如春涛贯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔚出。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工弟翘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骄酗。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓稀余,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酥筝。 傳聞我的和親對象是個殘疾皇子滚躯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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

  • 背景在HTTP協(xié)議的定義中,采用了一種機制來記錄客戶端和服務(wù)器端交互的信息嘿歌,這種機制被稱為cookie掸掏,cooki...
    時芥藍閱讀 2,363評論 1 17
  • 注:本文轉(zhuǎn)載自前端大全 背景 在HTTP協(xié)議的定義中,采用了一種機制來記錄客戶端和服務(wù)器端交互的信息宙帝,這種機制被稱...
    楠小忎閱讀 673評論 0 0
  • 1. cookie 1.1 什么是cookie cookie 是存儲于訪問者的計算機中的變量丧凤。每當(dāng)同一臺計算機通過...
    cbw100閱讀 4,059評論 0 13
  • 寫在前面 cookie和session的區(qū)別: 1、cookie數(shù)據(jù)存放在客戶的瀏覽器上步脓,session數(shù)據(jù)放在服...
    Pitfalls閱讀 1,524評論 0 17
  • 這是全中國最經(jīng)典的文章之一愿待,據(jù)說這也是中國點擊率最高的文章浩螺,10篇內(nèi)容,值得所有人品讀和感悟仍侥! 01 空白也是一種...
    海月玉暖閱讀 211評論 0 0