国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JavaWeb之Servlet:Cookie 和 Session

2019-11-14 22:03:52
字體:
來源:轉載
供稿:網友
javaWeb之Servlet:Cookie 和 session會話

現實生活中我們會用手機跟對方對話,拿起手機,撥號,然后對面接聽,跟著互相通話,最后會話結束。

這個過程也可以用我們的B/S模式來描述:

          打開瀏覽器—>輸入地址->發出請求->服務器收到請求->向瀏覽器發出響應->..重復.->關閉瀏覽器

這樣的過程我們用“會話”來描述,上面就一次會話的例子。

會話管理

知道會話的概念后,我們在平時上網是否可以看到一些網頁有這樣的操作:當你是第一次登入這個網站,網站會發出:”歡迎來到本網站”。然而,當你第二次登入該網站,它就會發出:”歡迎再次回來”。為什么服務器會知道我們已經登入過該頁面呢?無錯,就是在與服務器會話的過程中產生了一些數據,而這些數據被保存下來,服務器根據這些數據來判斷你是否登陸過該頁面,而輸出不同歡迎標語。

下面就來學習兩門會話信息管理技術:

      Cookie技術:會話數據保存在瀏覽器客戶端。

      Session技術:會話數據保存在服務器端。

Cookie技術什么是Cookie技術:

一種會話數據管理技術,該技術把會話數據保存在瀏覽器客戶端。

那么Cookie技術的原理是什么,它是如何工作的呢?

1)首先瀏覽器向服務器發出請求。

2)服務器就會根據需要生成一個Cookie對象,并且把數據保存在該對象內。

3)然后把該Cookie對象放在響應頭,一并發送回瀏覽器。

4)瀏覽器接收服務器響應后,提出該Cookie保存在瀏覽器端。

5)當下一次瀏覽器再次訪問那個服務器,就會把這個Cookie放在請求頭內一并發給服務器。

6)服務器從請求頭提取出該Cookie,判別里面的數據,然后作出相應的動作。

Cookie的體驗

知道了Cookie的原理后,我們就用它來實現一些功能吧~

從它的原理中,我們知道Cookie是在服務器端創建的,那么我們在Servlet中創建一個Cookie對象吧:

public class cookieTest extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {        Cookie cookie = new Cookie("name", "value");    }}

Cookie的構造方法接收兩個參數,第一個參數是該要傳遞的數據的名字,第二個是該數據的值。

然后我們把這個Cookie加到響應頭,發送給瀏覽器吧~

Cookie cookie = new Cookie("name", "value");        response.addCookie(cookie);

這樣一個Cookie就發送給瀏覽器了,我們在瀏覽器看看發過來的響應頭:

有一個Set-Cookie的請求頭,它保存了我們設置的信息。

然后我們用瀏覽器再次訪問該Servlet,看看它的請求頭:

可以看到,瀏覽器會把這個Cookie信息發過去服務器。

那么服務器收到這個請求后,如何得到該Cookie里的數據呢?

我們可以這樣做:

Cookie cookie = new Cookie("name", "value");        response.addCookie(cookie);                Cookie[] cookies = request.getCookies();        if(cookies!=null){            for(Cookie c: cookies){                String name = c.getName();                String value = c.getValue();                System.out.

調用request.getCookies()方法,返回一個Cookie數組,然后遍歷它把里面的內容取出來吧!

Cookie常用方法

1)創建Cookie對象

Cookie(java.lang.Stringname,java.lang.Stringvalue)

2)設置Cookie對象

setPath(java.lang.Stringuri)  --設置cookie的有效路徑,就是指定該Cookie訪問哪個資源時會傳過去,訪問其他資源則就不會傳。

setMaxAge(intexpiry)    --設置cookie的有效時長,以秒為單位

setValue(java.lang.StringnewValue)--設置cookie的值

3)發送cookie信息到瀏覽器

response.addCookie(Cookiecookie)

4)接收瀏覽器發送的cookie信息

Cookie[]getCookies()

Cookie細節

1)設置cookie的有效路徑:setPath(路徑)。把cookie設置到某個路徑下,那么瀏覽器在該路徑下訪問服務器時就會帶著cookie信息到服務器;否則,就不會帶著Cooke信息到服務器。

2)設置cookie的有效時長:setMaxAge(整數)。

正整數:表示cookie數據保存在瀏覽器的緩存區中(硬盤中),以秒為單位。例如,10:cookie在10秒之后失效!

負整數:表示cookie數據保存在瀏覽器的內存區中。關閉瀏覽器cookie就會失效!

零:表示刪除同名的cookie數據

3)設置cookie的值:setValue(值)

4)cookie保存的會話數據類型必須是字符串的。瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。

5)cookie不適合保存敏感數據(例如密碼)

Session技術

什么是Session技術:

一種會話數據管理技術,該技術把會話數據保存在服務器端。

同樣都是會話數據管理技術,為什么我們要發明Session技術呢?

我們先分析一下Cookie的局限性:

        1)Cookie數據類型都是String,且容量有限制的。

        2)Cookie不適合保存敏感數據

所以,Session技術可以解決這兩種情況。

那么Session技術的原理是什么,它是如何工作的呢?

1)瀏覽器發出請求到服務器。

2)服務器會根據需求生成Session對象,并且給這個Session對象一個編號,一個編號對應一個Session對象

3)服務器把需要記錄的數據封裝到這個Session對象里,然后把這個Session對象保存下來。

4)服務器把這個Session對象的編號放到一個Cookie里,隨著響應發送給瀏覽器

5)瀏覽器接收到這個cookie就會保存下來

6)當下一次瀏覽器再次請求該服務器服務,就會發送該Cookie

7)服務器得到這個Cookie,取出它的內容,它的內容就是一個Session的編號!!!

8)憑借這個Session編號找到對應的Session對象,然后利用該Session對象把保存的數據取出來!

Session的體驗

下一面我們就在Servlet內創建一個Session吧:

public class sessionTest extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                HttpSession session = request.getSession();        session.setAttribute("name", "Rime");    }}

這樣當瀏覽器請求這個Servlet服務時,就會把這個session發過去啦~,我們來看看服務器收到的響應頭吧!

可以看到服務器給瀏覽器發出了一個 Set-Cookie 的響應頭,里面有一個JSESSIONID!沒錯,這個就是Session的編號了!

然后我們再次訪問這個Servlet吧!

瀏覽器會把保存這個JSESSIONID的cookie發送過去服務器~那么服務器接收這個session編號,然后取出這個編號對應的數據吧??!

    //得到數據        String name = (String)session.getAttribute("name");                System.out.println("name="+name);

然后看到輸出結果:

name=Rime

這樣就服務器就可以根據這個name的值來根據需要做出一些動作了~

Session的API

學習HttpSession

1)創建/得到HttpSession對象

    HttpSessionrequest.getSession()

    HttpSessionrequest.getSession(booleancreate)

2)HttpSession作為域對象保存會話數據

    voidsetAttribute(java.lang.Stringname,java.lang.Objectvalue)保存數據

    java.lang.ObjectgetAttribute(java.lang.Stringname)得到數據

    voidremoveAttribute(java.lang.Stringname)清除數據

3)session細節:

    java.lang.StringgetId()得到session對象的編號

    voidsetMaxInactiveInterval(intinterval)設置session對象的有效時長

    voidinvalidate()銷毀session對象

Session細節

1)得到session編號:getId()

2)session對象生命周期:

  2.1session對象什么創建?

      執行request.getSession()方法時

  2.2session對象什么銷毀?

      1)默認情況下,session對象在30分鐘之后服務器自動銷毀。

      2)手動設置session有效時長

      voidsetMaxInactiveInterval(intinterval) -以秒為單位。

3)配置session的有效時長(統一配置)

4)手動銷毀

      voidinvalidate()

3)getSession方法的使用

      getSession(true)/getSession():創建或得到session對象。如果得不到session對象,創建 新的session對象。主要是用于創建session對象的。

      getSession(false):得到session對象。如果得不到session對象,返回null。主要用于判斷是否可以得到session對象的。

4)session編號的cookie過期時間:

      默認情況下,cookie是在瀏覽器關閉時失效?。?!

      修改cookie的有效時長:

      setMaxAge(正整數);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝兴县| 霍邱县| 兴隆县| 顺义区| 茂名市| 红河县| 穆棱市| 益阳市| 辽阳县| 昔阳县| 松溪县| 安多县| 玛曲县| 灵台县| 双峰县| 海丰县| 大洼县| 彭阳县| 胶州市| 延吉市| 且末县| 青岛市| 瓦房店市| 南溪县| 天镇县| 崇仁县| 通江县| 扎囊县| 佛坪县| 甘肃省| 绥阳县| 清镇市| 杭州市| 磴口县| 拉萨市| 双辽市| 神农架林区| 内黄县| 东莞市| 崇义县| 密山市|