會話概述及cookies的介紹

一、會話概述

在日常生活中巨朦,從撥通電話到掛斷電話之間的一連串的你問我答的過程就是一個會話衙熔。

Web應(yīng)用中的會話過程類似與生活中的打電話過程,他指的是客戶端(瀏覽器)與服務(wù)器之間連續(xù)一系列請求和響應(yīng)的過程名段,例如:戶到某購物網(wǎng)站購買商品,這時用戶會和網(wǎng)站之間發(fā)生多次的請求響應(yīng)泣懊,整個購物的過程稱為會話.

在打電話的過程中伸辟,通信雙方會有通話內(nèi)容,同樣嗅定,在客戶端和服務(wù)端交互的過程中自娩,也會產(chǎn)生一些數(shù)據(jù)用踩。

例如,用戶甲和用戶乙分別登錄了購物網(wǎng)站渠退,甲購買了一個小米手機(jī),乙購買了一個iPad,當(dāng)這兩個用戶結(jié)賬時脐彩,Web服務(wù)器需要對用戶甲和用戶乙的信息分別保存碎乃。

在以前講的知識中,HttpServletRequest和ServletConext對象都可以對數(shù)據(jù)進(jìn)行保存惠奸,但是這兩個對象都不行梅誓,具體原因如下:

(1)客戶端請求web服務(wù)器時,針對每次的Http請求佛南,Web服務(wù)器都會創(chuàng)建一個HttpServletRequest對象梗掰,該對象只能保存本次請求所傳遞的數(shù)據(jù)。由于購買和結(jié)賬是兩個不同的請求嗅回,因此及穗,在發(fā)送結(jié)賬請求時,之前購買請求中的數(shù)據(jù)將會丟失绵载。

(2)使用ServletContext對象保存數(shù)據(jù)時埂陆,由于同一個web應(yīng)用(項目)共享同一個ServletContext對象苛白,因此,當(dāng)用戶進(jìn)行結(jié)賬請求時焚虱,由于無法區(qū)分哪個商品是哪個用戶購買的购裙,而是將該購物網(wǎng)站的所有用戶購買的商品進(jìn)行結(jié)算,這顯然是不行的鹃栽。

為了保存會話過程中產(chǎn)生的數(shù)據(jù)躏率,在servlet技術(shù)中,提供了兩個用于保存會話數(shù)據(jù)的對象分別是cookie和session民鼓。

二禾锤、Cookie介紹&Cookie案例

2.1.Cookie和Session技術(shù)概述

用戶打開瀏覽器開始訪問服務(wù)器,在一系列的訪問過程中摹察,把用戶的這些操作稱為用戶和服務(wù)器的之間的對話(客戶端和服務(wù)器的會話)恩掷。

在交互的過程中,用戶的一系列操作供嚎,肯定會產(chǎn)生一些數(shù)據(jù)需要保存黄娘。這時就需要使用Java提供的Cookie或者Session技術(shù)來完成。

cookie的典型應(yīng)用是:

判斷用戶是否登陸過網(wǎng)站克滴,以便下次登錄時能夠直接登錄逼争。如果我們刪除cookie,則每次登錄必須從新填寫登錄的相關(guān)信息劝赔。

Cookie技術(shù)在實際網(wǎng)站中的工作原理:

Cookie:它是服務(wù)器在獲取到用戶的請求之后誓焦,把用戶的請求中的重要資源保存在這個對象中,在給用戶響應(yīng)的時候着帽,把這個對象的發(fā)給客戶端杂伟。然后瀏覽器接收到這個Cookie之后,瀏覽器會自動的把Cookie中的數(shù)據(jù)保存到瀏覽器管理的緩存中仍翰,下次用戶在訪問這個網(wǎng)站的時候赫粥,瀏覽器就會自動攜帶上次保存的Cookie中的數(shù)據(jù)到服務(wù)器,服務(wù)器進(jìn)而就能獲取到以前的信息予借。

2.2.Cookie的API介紹

2.2.1.創(chuàng)建Cookie

創(chuàng)建一個 cookie越平,cookie 是 servlet 發(fā)送到 Web 瀏覽器的少量信息,這些信息由瀏覽器保存灵迫,然后發(fā)送回服務(wù)器秦叛。cookie 的值可以唯一地標(biāo)識客戶端,因此 cookie 常用于會話管理瀑粥。

一個 cookie 擁有一個名稱挣跋、一個值和一些可選屬性,比如注釋利凑、路徑和域限定符浆劲、最大生存時間和版本號嫌术。一些 Web 瀏覽器在處理可選屬性方面存在 bug,因此有節(jié)制地使用這些屬性可提高 servlet 的互操作性牌借。

servlet 通過使用HttpServletResponse#addCookie方法將 cookie 發(fā)送到瀏覽器度气,該方法將字段添加到 HTTP 響應(yīng)頭。

通過Cookie的構(gòu)造函數(shù)膨报,告訴我們在服務(wù)器給響應(yīng)數(shù)據(jù)的時候磷籍,如果要發(fā)送一個Cookie對象,這時需要在服務(wù)器先創(chuàng)建一個Cookie對象现柠,而這個Cookie中保存的數(shù)據(jù)由key和value組成院领。

當(dāng)瀏覽器下次再訪問服務(wù)器的時候,就會攜帶這個Cookie對象到服務(wù)器够吩,服務(wù)器就會獲取到當(dāng)前這個Cookie對象比然,然后需要通過這個key,找出value值周循。

需要把瀏覽器cookie發(fā)送給瀏覽器强法,需要借助response對象完成

response.addCookie(Cookie對象);

初次訪問(debug追蹤):

在響應(yīng)中有cookie,在請求頭中沒有cookie的信息

第二次訪問:

2.2.2.獲取Cookie


在客戶端訪問servlet的時候湾笛,首先在servlet中先判斷當(dāng)前用戶有沒有攜帶cookie數(shù)據(jù)

如果有饮怯,我們就可以獲取這個cookie數(shù)據(jù);

如果沒有嚎研,我們就在程序中創(chuàng)建一個cookie給用戶寫到客戶端蓖墅。

下次用戶訪問的時候一定會攜帶Cookie到服務(wù)器。

獲取請求中的cookie需要使用request對象临扮。

request對象中的getCookies獲取到一個cookie數(shù)組论矾,因此一個Servlet可以同時發(fā)送給客戶端多個Cookie對象。

首次瀏覽器訪問:

第二次訪問:

2.2.3.Cookie分類

1公条、

臨時會話級別的Cookie

服務(wù)器給客戶端發(fā)送的Cookie拇囊,如果沒有指定Cookie在客戶端的保存時間,這時這個Cookie只會在瀏覽器運(yùn)行的期間存在靶橱;

當(dāng)瀏覽器關(guān)閉之后,客戶端中的Cookie隨著瀏覽器的關(guān)閉就消失了路捧。

2关霸、持久化的Cookie

在服務(wù)器給客戶端發(fā)送Cookie的時候,可以指定Cookie在客戶端的存活時間杰扫。

注意:這里的時間值不要太大

2.2.4.設(shè)置路徑(難點)

問題1:訪問服務(wù)器的每一個路徑都攜帶cookie數(shù)據(jù)這樣合理嗎队寇?

問題2:cookie的默認(rèn)路徑是什么? 有什么根據(jù)章姓?

如果創(chuàng)建某個cookie屬性沒有設(shè)置path屬性佳遣,那么該cookie只對當(dāng)前訪問路徑所屬的目錄及其子目錄有效识埋。

假設(shè):訪問/day11/cookie1,他的目錄是/day11,子目錄是/day11/xxx/yyy....,均有效 會攜帶cookie

假設(shè):訪問/day11/aaa/bbb/ccc/cookie1,他的目錄是/day11/aaa/bbb/ccc,子目錄是:/day11/aaa/bbb/ccc/xxx/yyy/....,均會攜帶cookie

如果想讓某個cookie項對站點的所有訪問路徑都有效,就調(diào)用:cookie.setPath("/")/表示http://ip:端口

2.2.5.Cookie的有效域名(了解)


設(shè)置當(dāng)前這個Cookie在哪個域名下有效零渐。一般的瀏覽器都不支持接受不是當(dāng)前域名下的Cookie窒舟。

如果把cookie的域名設(shè)置成其他的域名,而不是當(dāng)前這個資源的域名诵盼,

這個cookie被稱為第三方Cookie惠豺,幾乎所有的瀏覽器默認(rèn)不支持第三方Cookie。

注意:不要設(shè)置他

2.2.6.刪除Cookie

1风宁、將cookie的name(key)保持一致洁墙,value設(shè)置為"";

cookie = new Cookie("username","")

2、設(shè)置存活時間為0戒财,

cookie.setMaxAge(0)

3热监、路徑要發(fā)送cookie時保持一致。

cookie.setPath("/");

4饮寞、將cookie發(fā)送給瀏覽器狼纬。

response.addCookie(cookie)

2.3.cookie案例:顯示用戶上次訪問的時間

當(dāng)用戶訪問某些web應(yīng)用的時候,經(jīng)常會顯示出上次的訪問時間骂际。

例如:QQ登錄成功后疗琉,會顯示用戶上次的登錄時間。

1歉铝、向瀏覽器發(fā)送cookie

2盈简、從cookie中獲取上次訪問的時間

3根據(jù)上次訪問時間的內(nèi)容,給瀏覽器顯示對應(yīng)的內(nèi)容

首次訪問對應(yīng)的servlet

第N(>1)次訪問:

整體代碼:









最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末太示,一起剝皮案震驚了整個濱河市柠贤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌类缤,老刑警劉巖臼勉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異餐弱,居然都是意外死亡宴霸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門膏蚓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓢谢,“玉大人,你說我怎么就攤上這事驮瞧∶タ福” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵论笔,是天一觀的道長采郎。 經(jīng)常有香客問我千所,道長,這世上最難降的妖魔是什么蒜埋? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任淫痰,我火速辦了婚禮,結(jié)果婚禮上理茎,老公的妹妹穿的比我還像新娘黑界。我一直安慰自己,他們只是感情好皂林,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布朗鸠。 她就那樣靜靜地躺著,像睡著了一般础倍。 火紅的嫁衣襯著肌膚如雪烛占。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天沟启,我揣著相機(jī)與錄音忆家,去河邊找鬼。 笑死德迹,一個胖子當(dāng)著我的面吹牛芽卿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胳搞,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼卸例,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肌毅?” 一聲冷哼從身側(cè)響起筷转,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悬而,沒想到半個月后呜舒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡笨奠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年袭蝗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艰躺。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡呻袭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腺兴,到底是詐尸還是另有隱情,我是刑警寧澤廉侧,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布页响,位于F島的核電站篓足,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闰蚕。R本人自食惡果不足惜栈拖,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望没陡。 院中可真熱鬧涩哟,春花似錦、人聲如沸盼玄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埃儿。三九已至器仗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間童番,已是汗流浹背精钮。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留剃斧,地道東北人轨香。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像幼东,于是被迫代替她去往敵國和親臂容。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 從三月份找實習(xí)到現(xiàn)在筋粗,面了一些公司策橘,掛了不少,但最終還是拿到小米娜亿、百度丽已、阿里、京東买决、新浪沛婴、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,192評論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理督赤,服務(wù)發(fā)現(xiàn)嘁灯,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題躲舌。 96丑婿、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,397評論 0 10
  • 0 “我討厭旅行,我恨探險家「睿”列維-斯特勞斯在《憂郁的熱帶》開頭這樣寫道秒旋。 準(zhǔn)備好了士力架、壓縮餅干诀拭、大白兔奶糖...
    楊摩閱讀 870評論 2 1
  • 五迁筛、學(xué)校地址:河西校區(qū):天津市河西區(qū)大沽南路1038號濱海校區(qū):天津經(jīng)濟(jì)技術(shù)開發(fā)區(qū)第十三大街29號2016級新生安...
    彈殼閱讀 475評論 0 0