Cookie$Session


layout: post
title: Cookie$Session
subtitle: 用法
date: 2018-04-18
author: ZL
header-img: img/20180418.jpg
catalog: true
tags:
- Cookie
- Session


會話技術(shù)

就是存儲客服端的狀態(tài)锋恬,會話技術(shù)是幫助服務(wù)器 記住客戶端狀態(tài)(區(qū)分客戶端)
從打開一個瀏覽器訪問某個站點玄坦,到關(guān)閉這個瀏覽器的整個過程,成為一次會話。
會話技術(shù)分為Cookie和Session:
Cookie:數(shù)據(jù)存儲在客戶端本地,減少服務(wù)器端的存儲的壓力,安全性不好硼控,客戶端 可以清除cookie。
Session:將數(shù)據(jù)存儲到服務(wù)器端胳赌,安全性相對好牢撼,增加服務(wù)器的壓力。

二疑苫、Cookie技術(shù)

Cookie技術(shù)是將用戶的數(shù)據(jù)存儲到客戶端的技術(shù)

服務(wù)器端向客戶端發(fā)送一個Cookie

  1. 創(chuàng)建Cookie:
    Cookie cookie = new Cookie(String cookieName,String cookieValue);
    示例:
    Cookie cookie = new Cookie("username"熏版,"zhangsan");
    那么該cookie會以響應(yīng)頭的形式發(fā)送給客戶端:
    注意:Cookie中不能存儲中文

  2. 設(shè)置Cookie在客戶端的持久化時間:
    cookie.setMaxAge(int seconds); ---時間秒
    注意:如果不設(shè)置持久化時間,cookie會存儲在瀏覽器的內(nèi)存中捍掺,瀏覽器關(guān)閉 cookie信息銷毀(會話級別的cookie)撼短,如果設(shè)置持久化時間,cookie信息會 被持久化到瀏覽器的磁盤文件里
    示例:
    cookie.setMaxAge(10*60);
    設(shè)置cookie信息在瀏覽器的磁盤文件中存儲的時間是10分鐘挺勿,過期瀏覽器 自動刪除該cookie信息

  3. 設(shè)置Cookie的攜帶路徑:
    cookie.setPath(String path);
    注意:如果不設(shè)置攜帶路徑曲横,那么該cookie信息會在訪問產(chǎn)生該cookie的 web資源所在的路徑都攜帶cookie信息
    示例:
    cookie.setPath("/WEB16");
    代表訪問WEB16應(yīng)用中的任何資源都攜帶cookie
    cookie.setPath("/WEB16/cookieServlet");
    代表訪問WEB16中的cookieServlet時才攜帶cookie信息

  4. 向客戶端發(fā)送cookie:
    response.addCookie(Cookie cookie);

  5. 刪除客戶端的cookie:
    如果想刪除客戶端的已經(jīng)存儲的cookie信息,那么就使用同名同路徑的持久化時 間為0的cookie進行覆蓋即可

服務(wù)器端怎么接受客戶端攜帶的Cookie

cookie信息是以請求頭的方式發(fā)送到服務(wù)器端的:

image

  1. 通過request獲得所有的Cookie:
    Cookie[] cookies = request.getCookies();
  2. 遍歷Cookie數(shù)組,通過Cookie的名稱獲得我們想要的Cookie
    for(Cookie cookie : cookies){
      if(cookie.getName().equal(cookieName)){
        String cookieValue = cookie.getValue();
      }
    }
    

Session技術(shù)

Session技術(shù)是將數(shù)據(jù)存儲在服務(wù)器端的技術(shù)禾嫉,會為每個客戶端都創(chuàng)建一塊內(nèi)存空間 存儲客戶的數(shù)據(jù)灾杰,但客戶端需要每次都攜帶一個標識ID去服務(wù)器中尋找屬于自己的內(nèi) 存空間。所以說Session的實現(xiàn)是基于Cookie熙参,Session需要借助于Cookie存儲客 戶的唯一性標識JSESSIONID

獲得Session對象

HttpSession session = request.getSession();
此方法會獲得專屬于當前會話的Session對象艳吠,如果服務(wù)器端沒有該會話的Session 對象會創(chuàng)建一個新的Session返回,如果已經(jīng)有了屬于該會話的Session直接將已有 的Session返回(實質(zhì)就是根據(jù)JSESSIONID判斷該客戶端是否在服務(wù)器上已經(jīng)存在 session了)

向session中存取數(shù)據(jù)(session也是一個域?qū)ο螅?/h2>

Session也是存儲數(shù)據(jù)的區(qū)域?qū)ο竽跻詓ession對象也具有如下三個方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);

Session對象的生命周期

創(chuàng)建:第一次執(zhí)行request.getSession()時創(chuàng)建
銷毀:

  • 服務(wù)器(非正常)關(guān)閉時

  • session過期/失效(默認30分鐘)

    問題:時間的起算點 從何時開始計算30分鐘昭娩?
    從不操作服務(wù)器端的資源開始計時

    可以在工程的web.xml中進行配置

    <session-config>
            <session-timeout>30</session-timeout>
    </session-config>
    
  • 手動銷毀session
    session.invalidate();

重點

Cookie技術(shù):存到客戶端
發(fā)送cookie
Cookie cookie = new Cookie(name,value)
cookie.setMaxAge(秒)
cookie.setPath()
response.addCookie(cookie)
獲得cookie
Cookie[] cookies = request.getCookies();
cookie.getName();
cookie.getValue();

Session技術(shù):存到服務(wù)器端 借助cookie存儲JSESSIONID
HttpSession session = request.getSession();

setAttribute(name,value);
getAttribute(name);

session生命周期
創(chuàng)建:第一次指定request.getSession();
銷毀:服務(wù)器關(guān)閉、session失效/過期弄屡、手動session.invalidate();
session作用范圍:默認一會話中

代碼示例

  • 發(fā)出cookie

    //1题禀、創(chuàng)建cookie對象
    Cookie cookie = new Cookie("name","zhangsan");
    
    //1.1 為cookie設(shè)置持久化時間 ---- cookie信息在硬盤上保存的時間
    cookie.setMaxAge(10*60);//10分鐘 ---- 時間設(shè)置為0代表刪除該cookie
    //1.2 為cookie設(shè)置攜帶的路徑
    //cookie.setPath("/WEB16/sendCookie");//訪問sendCookie資源時才攜帶這個cookie
    cookie.setPath("/WEB16");//訪問WEB16下的任何資源時都攜帶這個cookie
    //cookie.setPath("/");//訪問服務(wù)器下的所有的資源都攜帶這個cookie
    
    //2、將cookie中存儲的信息發(fā)送到客戶端---頭
    response.addCookie(cookie);
    
  • 獲取cookie

      //獲得客戶端攜帶的cookie的數(shù)據(jù)
    Cookie[] cookies = request.getCookies();
    //Cookie cookie = new Cookie("name","zhangsan");
    //通過cookie名稱獲得想要的cookie
    if(cookies!=null){
      for(Cookie cookie : cookies){
        //獲得cookie的名稱
        String cookieName = cookie.getName();
        if(cookieName.equals("name")){
          //獲得該cookie的值
          String cookieValue = cookie.getValue();
          System.out.println(cookieValue);
        }
      }
    }
    
  • 刪除cookie

    //刪除客戶端保存 name=zhangsan的cookie信息
    Cookie cookie = new Cookie("name","");
    //將path設(shè)置成與要刪除cookie的path一致
    cookie.setPath("/WEB16");
    //設(shè)置時間是0
    cookie.setMaxAge(0);
    
    response.addCookie(cookie);
    
  • 設(shè)置session

    //創(chuàng)建屬于該客戶端(會話)的私有的session區(qū)域
    /* request.getSession()方法內(nèi)部會判斷 該客戶端是否在服務(wù)器端已經(jīng)存在session
     * 如果該客戶端在此服務(wù)器不存在session 那么就會創(chuàng)建一個新的session對象
     * 如果該客戶端在此服務(wù)器已經(jīng)存在session 獲得已經(jīng)存在的該session返回
     */
    HttpSession session = request.getSession();
    
    session.setAttribute("name", "jerry");
    
    String id = session.getId();//該session對象的編號id
    
  • 從session中獲取數(shù)據(jù)

    //從session中獲得存儲的數(shù)據(jù)
    HttpSession session = request.getSession();
    
    Object attribute =  session.getAttribute("name");
    
    response.getWriter().write(attribute+"");
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膀捷,一起剝皮案震驚了整個濱河市迈嘹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌全庸,老刑警劉巖秀仲,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壶笼,居然都是意外死亡神僵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門覆劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來保礼,“玉大人,你說我怎么就攤上這事责语∨谡希” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵坤候,是天一觀的道長胁赢。 經(jīng)常有香客問我,道長白筹,這世上最難降的妖魔是什么智末? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮徒河,結(jié)果婚禮上系馆,老公的妹妹穿的比我還像新娘。我一直安慰自己虚青,他們只是感情好它呀,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棒厘,像睡著了一般纵穿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奢人,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天谓媒,我揣著相機與錄音,去河邊找鬼何乎。 笑死句惯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的支救。 我是一名探鬼主播抢野,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼各墨!你這毒婦竟也來了指孤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贬堵,失蹤者是張志新(化名)和其女友劉穎恃轩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黎做,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡叉跛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒸殿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筷厘。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宏所,靈堂內(nèi)的尸體忽然破棺而出酥艳,到底是詐尸還是另有隱情,我是刑警寧澤楣铁,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布玖雁,位于F島的核電站,受9級特大地震影響盖腕,放射性物質(zhì)發(fā)生泄漏赫冬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一溃列、第九天 我趴在偏房一處隱蔽的房頂上張望劲厌。 院中可真熱鬧,春花似錦听隐、人聲如沸补鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽风范。三九已至咨跌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硼婿,已是汗流浹背锌半。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寇漫,地道東北人刊殉。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像州胳,于是被迫代替她去往敵國和親记焊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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

  • 會話(Session)跟蹤是Web程序中常用的技術(shù)栓撞,用來跟蹤用戶的整個會話遍膜。常用的會話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,620評論 1 49
  • 一、會話技術(shù)簡介1.存儲客戶端的狀態(tài)由一個問題引出今天的內(nèi)容腐缤,例如網(wǎng)站的購物系統(tǒng)捌归,用戶將購買的商品信息存儲到哪 ...
    神豪VS勇士贏閱讀 278評論 0 0
  • 目錄Cookie機制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,943評論 7 186
  • 不知從何時起惜索,初登講臺時的滿腔熱情,在歲月的河流里已經(jīng)消失殆盡剃浇,留下的只有那日復(fù)一日巾兆、年復(fù)一年的備課、上課虎囚、...
    陜縣2956張麗萍閱讀 216評論 0 0
  • 從個人的角度來看: 今天我的心情怎么樣角塑?有什么印象深刻的事情?什么事情讓我獲得了成就感淘讥?遇到了什么問題圃伶?有什么疑惑...
    DouQing閱讀 338評論 1 2