web16 cookie session

  • 在temp代碼模板中推掸,有需要變換的部分桶蝎,打出$符號驻仅,在后面選擇{cursor}
  • 會話開始是瀏覽器客戶端打開相應(yīng)網(wǎng)頁,結(jié)束是瀏覽器關(guān)閉(在windows中的內(nèi)存結(jié)束)
    獲得cookie只有一個方法:getcookies()
  • 一臺電腦可以有多個客戶端
  • 新session創(chuàng)建條件(客戶端沒有第一次訪問登渣,客戶端清除cookie服務(wù)器端還有雾家,服務(wù)器端定期清除session)就是訪問資源時候getsession會開客戶端有沒有,沒有就創(chuàng)建
  • session過期:服務(wù)器關(guān)閉绍豁,session過期芯咧,手動銷毀
  • session過期時間都在做自己的web.xml中配置不在代碼中設(shè)置
 <session-config>
三十分鐘過期
        <session-timeout>30</session-timeout>
    </session-config>
  • session中的jsession是依存于cookie而存在的要想長期存在
  • 一個思想是服務(wù)器面對的是許多不確定的客戶端而不是一個
  • session不存不經(jīng)常用的比如(驗(yàn)證碼粗偶信息)減少服務(wù)器壓力
  • 兩個servlet傳遞數(shù)據(jù)時候使用session(比如驗(yàn)證圖片信息inmservlet傳遞到loginservlet)
  1. 會話技術(shù):從打開一個瀏覽器訪問某個站點(diǎn),到關(guān)閉這個瀏覽器的整個過程竹揍,成為一次會話敬飒。
  • 會話技術(shù)分為Cookie和Session:
    Cookie:數(shù)據(jù)存儲在客戶端本地,減少服務(wù)器端的存儲的壓力芬位,安全性不好无拗,客戶端 可以清除cookie
    Session:將數(shù)據(jù)存儲到服務(wù)器端,安全性相對好昧碉,增加服務(wù)器的壓力
1)創(chuàng)建Cookie:
Cookie cookie = new Cookie("username"英染,"zhangsan");
那么該cookie會以響應(yīng)頭的形式發(fā)送給客戶端:
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信息默認(rèn)會在訪問產(chǎn)生該cookie的web資源所在的路徑都攜帶cookie信息(同一級)
示例:
cookie.setPath("/WEB16");
代表訪問WEB16應(yīng)用中的任何資源都攜帶cookie
cookie.setPath("/WEB16/cookieServlet");
代表訪問WEB16中的cookieServlet時才攜帶cookie信息
cookie.setPath("/");//訪問服務(wù)器下的所有的資源都攜帶這個cookie
4)向客戶端發(fā)送cookie:
response.addCookie(Cookie cookie);
5)刪除客戶端的cookie:
如果想刪除客戶端的已經(jīng)存儲的cookie信息,那么就使用同名同路徑的持久化時  間為0的cookie進(jìn)行覆蓋即可
//刪除客戶端保存 name=zhangsan的cookie信息
Cookie cookie = new Cookie("name","");
//將path設(shè)置成與要刪除cookie的path一致
cookie.setPath("/WEB16");
//設(shè)置時間是0
cookie.setMaxAge(0);
response.addCookie(cookie);
-------------------------------------------
服務(wù)器端接受cookie
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // 獲得客戶端攜帶的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);
                }
            }
        }
    }

---------------顯示上次登錄時間---------------------
public class LastAccessTimeServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 獲得當(dāng)前時間
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String currentTime = format.format(date);
        // 1论颅、創(chuàng)建Cookie 記錄當(dāng)前的最新的訪問時間
        Cookie cookie = new Cookie("lastAccessTime", currentTime);
        cookie.setMaxAge(60 * 10 * 500);
        response.addCookie(cookie);
        // 2哎垦、獲得客戶端攜帶cookie ---- lastAccessTime
        String lastAccessTime = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie coo : cookies) {
                if ("lastAccessTime".equals(coo.getName())) {
                    lastAccessTime = coo.getValue();
                }
            }
        }
    response.setContentType("text/html;charset=UTF-8");
        if (lastAccessTime == null) {
            response.getWriter().write("您是第一次訪問");
        } else {
            response.getWriter().write("您上次的訪問的時間是:" + lastAccessTime);
        }

    }

2.Session也是一個域?qū)ο?/p>

  • Session技術(shù)是將數(shù)據(jù)存儲在服務(wù)器端的技術(shù),會為每個客戶端都創(chuàng)建一塊內(nèi)存空間 存儲客戶的數(shù)據(jù)恃疯,但客戶端需要每次都攜帶一個標(biāo)識ID去服務(wù)器中尋找屬于自己的內(nèi) 存空間漏设。所以說Session的實(shí)現(xiàn)是基于Cookie,Session需要借助于Cookie存儲客 戶的唯一性標(biāo)識JSESSIONID
1.獲得Session對象
HttpSession session = request.getSession();
此方法會獲得專屬于當(dāng)前會話的Session對象今妄,如果服務(wù)器端沒有該會話的Session 對象會創(chuàng)建一個新的Session返回郑口,如果已經(jīng)有了屬于該會話的Session直接將已有的Session返回(實(shí)質(zhì)就是根據(jù)JSESSIONID判斷該客戶端是否在服務(wù)器上已經(jīng)存在session了)

2.向session中存取數(shù)據(jù)(session也是一個域?qū)ο螅?Session也是存儲數(shù)據(jù)的區(qū)域?qū)ο螅詓ession對象也具有如下三個方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3.Session對象的生命周期(面試題/筆試題)
創(chuàng)建:第一次執(zhí)行request.getSession()時創(chuàng)建
銷毀:
1)服務(wù)器(非正常)關(guān)閉時
2)session過期/失效(默認(rèn)30分鐘)

問題:時間的起算點(diǎn) 從何時開始計(jì)算30分鐘蛙奖?
從不操作服務(wù)器端的資源開始計(jì)時

可以在工程的web.xml中進(jìn)行配置
<session-config>
        <session-timeout>30</session-timeout>
</session-config>
3)手動銷毀session
session.invalidate();

作用范圍:
默認(rèn)在一次會話中潘酗,也就是說在,一次會話中同一個客戶端任何資源公用一個session對象
面試題:瀏覽器關(guān)閉雁仲,session就銷毀了仔夺? 不對

總結(jié):
會話技術(shù):
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作用范圍:默認(rèn)一會話中
----------------延長jsession時間就是自己重新寫一次所在cookie的時間-----------------
protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //創(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   
        //手動創(chuàng)建一個存儲JSESSIONID的Cookie 為該cookie設(shè)置持久化時間
        Cookie cookie = new Cookie("JSESSIONID",id);
        cookie.setPath("/WEB16/");
        cookie.setMaxAge(60*10);
    response.addCookie(cookie);
response.getWriter().write("JSESSIONID:"+id);       
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缸兔,一起剝皮案震驚了整個濱河市日裙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惰蜜,老刑警劉巖昂拂,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抛猖,居然都是意外死亡格侯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門财著,熙熙樓的掌柜王于貴愁眉苦臉地迎上來联四,“玉大人,你說我怎么就攤上這事撑教〕眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵伟姐,是天一觀的道長收苏。 經(jīng)常有香客問我,道長愤兵,這世上最難降的妖魔是什么鹿霸? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮恐似,結(jié)果婚禮上杜跷,老公的妹妹穿的比我還像新娘。我一直安慰自己矫夷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布憋槐。 她就那樣靜靜地躺著双藕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阳仔。 梳的紋絲不亂的頭發(fā)上忧陪,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音近范,去河邊找鬼嘶摊。 笑死,一個胖子當(dāng)著我的面吹牛评矩,可吹牛的內(nèi)容都是我干的叶堆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斥杜,長吁一口氣:“原來是場噩夢啊……” “哼虱颗!你這毒婦竟也來了沥匈?” 一聲冷哼從身側(cè)響起撰洗,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤灾梦,失蹤者是張志新(化名)和其女友劉穎名扛,沒想到半個月后压汪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犀被,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泌参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年霎桅,在試婚紗的時候發(fā)現(xiàn)自己被綠了旅择。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣赔。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡预麸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拉背,到底是詐尸還是另有隱情师崎,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布椅棺,位于F島的核電站犁罩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏两疚。R本人自食惡果不足惜床估,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诱渤。 院中可真熱鬧丐巫,春花似錦、人聲如沸勺美。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赡茸。三九已至缎脾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間占卧,已是汗流浹背遗菠。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留华蜒,地道東北人辙纬。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像叭喜,于是被迫代替她去往敵國和親贺拣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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