JavaEE-Servlet會話-Cookie和Session

瀏覽器開始訪問網(wǎng)站到結(jié)束期間產(chǎn)生的多次請求響應(yīng)組合是一次會話,
可通過Cookie或Session技術(shù)保存會話產(chǎn)生的數(shù)據(jù)篮奄。

1.Cookie

用于在瀏覽器保存會話數(shù)據(jù)(用戶數(shù)據(jù))

Cookie 大小限制:
    瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie最大4KB

Cookie 保存時長:
    會話 Cookie: 不設(shè)置過期時間,cookie只在內(nèi)存中,不同瀏覽器進(jìn)程不能共享,瀏覽器關(guān)閉就刪除
    持久 Cookie: 設(shè)置過期時間,cookie存到硬盤,可以在不同瀏覽器進(jìn)程間共享,瀏覽器關(guān)閉后依然有效,直到過期時間

1.讀寫Cookie
    Cookie[] cookies =  request.getCookies(); //獲取Http請求頭 Cookie, 多個鍵值對
    Cookie cookie = new Cookie(key,value);
    response.addCookie(cookie);               //添加Http響應(yīng)頭 set-cookie,通知瀏覽器保存該cookie

2.設(shè)置Cookie的過期時間(Expires)
    若不設(shè)置,Cookie默認(rèn)只在瀏覽器內(nèi)存中
    cookie.setMaxAge(24*60*60); //瀏覽器只保存1天(在硬盤中)
    cookie.setMaxAge(-1);       //瀏覽器關(guān)閉就刪除(只在內(nèi)存中,默認(rèn)情況)
    cookie.setMaxAge(0);        //期限為0,瀏覽器會刪除已存在的cookie
    
3.設(shè)置Cookie歸屬的域名Domain/路徑Path
    若不設(shè)置,默認(rèn)設(shè)置為發(fā)送Cookie的域名Domain/路徑Path  
    假設(shè)發(fā)送Cookie的資源路徑是: http://www.lioil.win/testWeb/testJ
    cookie.setDomain("lioil.com"); //只能若設(shè)置為當(dāng)前域名,或域名一部分
    cookie.setPath("/testWeb/testJ");
    cookie.setPath("/testWeb/");
    cookie.setPath("/");

4.Cookie中文亂碼
    Cookie是放在HTTP頭部,而HTTP協(xié)議規(guī)定: 在HTTP頭部只能用標(biāo)準(zhǔn)ACSII字符; 所以瀏覽器用ACSII解析中文出現(xiàn)亂碼
    解決方法: 對中文進(jìn)行URL編碼轉(zhuǎn)為ACSII字符(URLEncoder/URLDecoder)
    
    其實Cookie的中文亂碼不需要解決, 雖然把Cookie傳到瀏覽器顯示亂碼了, 但再傳回來服務(wù)器解碼就可以恢復(fù)中文=P獭<劢场!
    chrome瀏覽器設(shè)置界面可以查看Cookie的中文內(nèi)容(估計是UTF-8解碼)

2.Session

1)定義
在服務(wù)器保存會話數(shù)據(jù)(用戶數(shù)據(jù))
生存周期:
    創(chuàng)建: 首次調(diào)用reqeust.getSession()創(chuàng)建
    銷毀: 手動調(diào)用session.invalidate()銷毀, 或session超時銷毀, 或服務(wù)器非正常關(guān)閉銷毀;
    
    session鈍化: 服務(wù)器正常關(guān)閉,未超時的session會保存在硬盤(tomcat/work)
    session活化: 再啟動服務(wù)器,鈍化session恢復(fù)到內(nèi)存
    
    默認(rèn)超30分鐘沒有訪問session對象就銷毀
    在tomcat/conf/web.xml 或 web項目/web.xml 配置session的超時時長
        <session-config>
            <session-timeout>60</session-timeout>
        </session-config>

session = request.getSession();
session.getAttribute();
session.getAttributeNames();
session.setAttribute();
session.removeAttribute();

session.invalidate();
session.getId();
session.isNew();
session.getCreationTime();
session.getMaxInactiveInterval();

2)原理
調(diào)用request.getSession(),
檢查Http請求頭有無cookie(sessionID),
    如果有,則找到服務(wù)器對應(yīng)session,
    如果無,則檢查Http請求URL有無sessionID,
        如果有,則找到服務(wù)器對應(yīng)session,
        如果無,則認(rèn)為瀏覽器無對應(yīng)Session,創(chuàng)建Session,并在Http響應(yīng)頭添加cookie(sessionID)
        
默認(rèn)情況下,cookie(sessionID)沒有設(shè)置MaxAge,只在內(nèi)存中(不同瀏覽器無法公用),關(guān)閉瀏覽器cookie就丟失,
可手動發(fā)送cookie(sessionID)設(shè)置MaxAge,使cookie存在硬盤中乘瓤。

3)URL重寫
瀏覽器禁用Cookie時,可將所有URL重寫加上sessionID
request.getSession() 在URL重寫前一定要先創(chuàng)建出Session
response.encodeURL() 一般地址重寫
response.encodeRedirectURL() 重定向地址重寫

簡書: http://www.reibang.com/p/be23dbf46392
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54644654
GitHub博客:http://lioil.win/2017/01/21/Servlet-Cookie-Session.html
Coding博客:http://c.lioil.win/2017/01/21/Servlet-Cookie-Session.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脯宿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搀军,更是在濱河造成了極大的恐慌,老刑警劉巖勇皇,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罩句,死亡現(xiàn)場離奇詭異,居然都是意外死亡儒士,警方通過查閱死者的電腦和手機的止,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來着撩,“玉大人,你說我怎么就攤上這事匾委⊥闲穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵赂乐,是天一觀的道長薯鳍。 經(jīng)常有香客問我,道長挨措,這世上最難降的妖魔是什么挖滤? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮浅役,結(jié)果婚禮上斩松,老公的妹妹穿的比我還像新娘。我一直安慰自己觉既,他們只是感情好惧盹,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布乳幸。 她就那樣靜靜地躺著,像睡著了一般钧椰。 火紅的嫁衣襯著肌膚如雪粹断。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天嫡霞,我揣著相機與錄音瓶埋,去河邊找鬼。 笑死诊沪,一個胖子當(dāng)著我的面吹牛悬赏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娄徊,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闽颇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寄锐?” 一聲冷哼從身側(cè)響起兵多,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橄仆,沒想到半個月后剩膘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡盆顾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年怠褐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片您宪。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡奈懒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宪巨,到底是詐尸還是另有隱情磷杏,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布捏卓,位于F島的核電站极祸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怠晴。R本人自食惡果不足惜遥金,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜田。 院中可真熱鬧稿械,春花似錦、人聲如沸物邑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茂嗓,卻和暖如春餐茵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背述吸。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工忿族, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝌矛。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓道批,卻偏偏與公主長得像,于是被迫代替她去往敵國和親入撒。 傳聞我的和親對象是個殘疾皇子隆豹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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