Cookie和Session

會話技術(shù)(Cookie和Session)是幫助服務(wù)器記住客戶端狀態(tài)(區(qū)分客戶端)

存儲客戶端的狀態(tài)

由一個問題引出今天的內(nèi)容,例如網(wǎng)站的購物系統(tǒng),用戶將購買的商品信息存儲到哪 里?因?yàn)镠ttp協(xié)議是無狀態(tài)的,也就是說每個客戶訪問服務(wù)器端資源時,服務(wù)器并 不知道該客戶端是誰,所以需要會話技術(shù)識別客戶端的狀態(tài)。會話技術(shù)是幫助服務(wù)器 記住客戶端狀態(tài)(區(qū)分客戶端)

會話技術(shù)

從打開一個瀏覽器訪問某個站點(diǎn),到關(guān)閉這個瀏覽器的整個過程,成為一次會話。會 話技術(shù)就是記錄這次會話中客戶端的狀態(tài)與數(shù)據(jù)的。
會話技術(shù)分為Cookie和Session:
Cookie:數(shù)據(jù)存儲在客戶端本地,減少服務(wù)器端的存儲的壓力,安全性不好,客戶端 可以清除cookie
Session:將數(shù)據(jù)存儲到服務(wù)器端,安全性相對好,增加服務(wù)器的壓力

Cookie技術(shù)

Cookie技術(shù)是將用戶的數(shù)據(jù)存儲到客戶端的技術(shù),我們分為兩方面學(xué)習(xí):

第一,服務(wù)器端怎樣將一個Cookie發(fā)送到客戶端

第二,服務(wù)器端怎樣接受客戶端攜帶的Cookie

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

創(chuàng)建Cookie:

Cookie cookie = new Cookie(String cookieName,String cookieValue);

示例:

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

那么該cookie會以響應(yīng)頭的形式發(fā)送給客戶端:

注意:Cookie中不能存儲中文

設(shè)置Cookie在客戶端的持久化時間:

cookie.setMaxAge(int seconds); ---時間秒

注意:如果不設(shè)置持久化時間,cookie會存儲在瀏覽器的內(nèi)存中,瀏覽器關(guān)閉 cookie信息銷毀(會話級別的cookie),如果設(shè)置持久化時間,cookie信息會 被持久化到瀏覽器的磁盤文件里

示例:

cookie.setMaxAge(30*60);

設(shè)置cookie信息在瀏覽器的磁盤文件中存儲的時間是30分鐘,時間到了,瀏覽器會自動刪除該cookie信息

設(shè)置Cookie的攜帶路徑:

cookie.setPath(String path);

注意:如果不設(shè)置攜帶路徑,那么該cookie信息會在訪問產(chǎn)生該cookie的 web資源所在的路徑都攜帶cookie信息

示例:

cookie.setPath("/WEB");

代表訪問WEB應(yīng)用中的任何資源都攜帶cookie

cookie.setPath("/WEB/cookieServlet");

代表訪問WEB中的cookieServlet時才攜帶cookie信息

向客戶端發(fā)送cookie:

response.addCookie(cookie);

刪除客戶端的cookie:

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

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

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

通過request獲得所有的Cookie:

Cookie[] cookies = request.getCookies();

遍歷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ù),但客戶端需要每次都攜帶一個標(biāo)識ID去服務(wù)器中尋找屬于自己的內(nèi) 存空間。所以說Session的實(shí)現(xiàn)是基于Cookie,Session需要借助于Cookie存儲客 戶的唯一性標(biāo)識JSESSIONID

學(xué)習(xí)目標(biāo):

  • 怎樣獲得屬于本客戶端的session對象(內(nèi)存區(qū)域)?
  • 怎樣向session中存取數(shù)據(jù)(session也是一個域?qū)ο螅?/li>
  • session對象的生命周期 ?

獲得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了,其實(shí)第一次客戶端沒有JSESSIONID)

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

Session也是存儲數(shù)據(jù)的區(qū)域?qū)ο?,所以session對象也具有如下三個方法:

  1. session.setAttribute(String name,Object obj);
  2. session.getAttribute(String name);
  3. session.removeAttribute(String name);

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é):

重點(diǎn):整個會話過程的具體過程

Session

會話技術(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)一會話中
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我遇到一個親戚,托他的福,我才有機(jī)會與他身邊那些有著成功背景的老長輩聊人生。我向一位長輩傾訴了我的人生心事,他也...
    643f750edd53閱讀 298評論 0 0
  • 近日,保健品被推到了風(fēng)口浪尖,一些知名品牌被監(jiān)管部門查禁,高管被采取刑事措施。 (一) 我...
    李煒微言閱讀 1,503評論 1 16
  • 三行詩:這個世界 《理想》 遠(yuǎn)方待放的花朵 睜著會說話的眼睛 望斷了去路,不斷的人往 《孤獨(dú)》 推拒了...
    占峰斯人閱讀 694評論 9 7
  • 1. “砰”,一聲巨響,一袋垃圾從對面那棟樓上丟了下來,抬頭向上看,是從五樓扔下來的。只見那個高空扔垃圾的人轉(zhuǎn)身就...
    _簡安閱讀 940評論 0 1

友情鏈接更多精彩內(nèi)容