日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day10_cookiesession学习笔记

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day10_cookiesession学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、會話概述

  1、什么是會話?如同打電話。

會話可簡單理解為:用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然后關閉瀏覽器,整個過程稱之為一個會話。

  2、會話過程要解決的問題是什么?保持各個客戶端自己的數據。

    ? 每個用戶在使用瀏覽器與服務器進行會話的過程中,不可避免各自會產生一些數據,程序要想辦法為每個用戶保存這些數據。

    ? 例如:用戶點擊超鏈接通過一個servlet購買了一個商品,程序應該想辦法保存用戶購買的商品,以便于用戶點結帳servlet時,結帳servlet可以得到用戶購買的商品為用戶結帳。

    ? 思考:用戶購買的商品保存在request或servletContext中行不行?答:不行。

  保存會話數據的兩種技術 :

    Cookie:是客戶端技術,程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。

?     ?當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶著各自的數據去。

? ?    這樣,web資源處理的就是用戶各自的數據了。

    HttpSession:Session是服務器端技術,利用這個技術,服務器在運行時可以為每一個用戶的瀏覽器創建一個其獨享的HttpSession對象

? ?    由于session為用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的數據放在各自的session中,

? ?    當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的session中取出數據為用戶服務。

二、Cookie(餅干/小甜餅)

    由于Cookie數據是由客戶端來保存和攜帶的,所以稱之為客戶端技術。

  

    javax.servlet.http.Cookie類用于創建一個Cookie,response接口中定義了一個addCookie方法,它用于在其響應消息頭中增加一個相應的Set-Cookie頭字段。?

    同樣,request接口中也定義了一個getCookies方法,它用于獲取客戶端提交的Cookie。

  1、屬性:

    name:該名稱不能唯一確定一個Cookie。路徑可能不同。

    value:不能存中文。

    path:默認值是寫Cookie的那個程序的訪問路徑。

    比如:http://localhost:8080/day10_00_cookie/servlet/ck1寫的Cookie

    path就是:/day10_00_cookie/servlet?即看當前創建cookie的資源(servlet)文件路徑。

      客戶端在訪問服務器另外資源時,根據訪問的路徑來決定是否帶著Cookie到服務器。

      如果當前訪問的路徑是以cookie的path開頭的路徑(包括在該路徑下的子路徑),瀏覽器就帶Cookie。否則不帶Cookie。

    maxAge:cookie的緩存時間。默認是-1,-1指示該cookie將保留到瀏覽器關閉為止。(默認存在瀏覽器的緩存中)。單位是秒。

      負數:表示cookie的數據存在瀏覽器緩存中。

      0:表示刪除。注意:路徑要保持一致,否則可能刪錯人。

      正數:表示緩存(持久化到磁盤上)的時間。單位是秒。

  2、方法:

    public Cookie(String name, String value) 構造方法(只有一個)

    setValue與getValue方法?

    setMaxAge與getMaxAge方法(單位為秒)

    setPath與getPath方法

    setDomain與getDomain方法

    getName方法

  3、補充知識點:

? ?     面試題:Servlet負責那些事情?

? ? ? ?     1. 獲取表單數據

? ? ? ?     2. 處理業務邏輯

? ? ? ?     3. 分發轉向

? ?   案例:

? ? ? ?   1. 客戶端記住用戶名

? ? ? ?   2. 顯示用戶上次瀏覽過的商品

三、HttpSession(會話)

在WEB開發中,服務器可以為每個用戶瀏覽器創建一個會話對象(session對象),注意:一個瀏覽器獨占一個session對象(默認情況下)。 因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨占的session中,當用戶使用瀏覽器訪問其它程序時,其它程序可以從用戶的session中取出該用戶的數據,為用戶服務。 Session和Cookie的主要區別在于: Cookie是把用戶的數據寫給用戶的瀏覽器。 Session技術把用戶的數據寫到用戶獨占的session中。     Session對象由服務器創建,開發人員可以調用request對象的getSession方法得到session對象。

  1、為什么要學HttpSession?

      >?它也是一個域對象:?servletContext(不同瀏覽器) >?session(同一瀏覽器的多個會話) > request(一個會話)?

      >?同一個會話下,可以使一個應用的多個資源共享數據

      >?cookie是客戶端技術,只能存字符串,不安全,存儲少量信息,不適合存儲敏感信息。HttpSession是服務器端的技術,它可以存對象。

  2、常用方法

      把數據保存在HttpSession對象中,該對象也是一個域對象。

        void?setAttribute(String?name, Object?value)?使用指定名稱將對象綁定到此會話。如果具有同樣名稱的對象已經綁定到該會話,則替換該對象。

        Object?getAttribute(String?name)?返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回 null。

        void?removeAttribute(String?name)?從此會話中移除與指定名稱綁定在一起的對象。如果會話沒有與指定名稱綁定在一起的對象,則此方法不執行任何操作。

        String getId()?返回包含分配給此會話的唯一標識符的字符串。標識符是由 servlet 容器分配的,并且是與實現相關的。?

        setMaxInactiveInterval(int?interval) 設置session的存活時間(默認存活時間是30分鐘)

        void invalidate()?使此會話無效(退出網站時調用)

  3、getSession():內部執行原理

      HttpSession?request.getSession():內部執行原理

        1、獲取名稱為JSESSIONID的Cookie的值。例如:Cookie: JSESSIONID=070BB766FAB03E03DBF28F8040CA616F

        2、如果沒有這樣的Cookie,服務器則創建一個新的HttpSession對象,并分配一個唯一的SessionID,并且向客戶端寫了一個名字為JSESSIONID=sessionID的Cookie。

        3、如果有這樣的Cookie,服務器則獲取Cookie的值(即HttpSession對象的值),從服務器的內存中根據ID找那個HttpSession對象:

          找到了:取出繼續為你服務。

          找不到:從2開始,創建一個新的HttpSession對象。

      HttpSession?request.getSession(boolean?create):返回與此請求關聯的當前 HttpSession,如果沒有當前會話并且 create 為 true,則返回一個新會話。?

        參數:

          true:和getSession()功能一樣。

          false:根據客戶端JSESSIONID的Cookie的值,找對應的HttpSession對象,找不到返回null(但不會創建新的,只是查詢)。

        

  4、客戶端禁用Cookie后的會話數據保存問題

      客戶端禁用Cookie:瀏覽器永遠不會向服務器發送Cookie的請求消息頭。

      解決方案:

        方案一:在主頁上給出提示:請不要禁用您的Cookie。

        方案二:URL重寫。必須對網站的所有地址都重寫。??

? ? ? ? ? ? ? ?http://url? ---> http://url;JSESSIONID=070BB766FAB03E03DBF28F8040CA616F    

        response.encodeRedirectURL(String url);

? ?          ?用于對sendRedirect方法后的url地址進行重寫。

        response.encodeURL(String?url);

          ? 看瀏覽器有沒有發送Cookie請求消息頭,沒有就重寫URL,有就不重寫。

          ? 用于對表單action和超鏈接的url地址進行重寫。

        request.getSession(); // 必須寫,雖然沒有接收

?

我的GitHub地址:https://github.com/heizemingjun
我的博客園地址:http://www.cnblogs.com/chenmingjun
我的螞蟻筆記博客地址:http://blog.leanote.com/chenmingjun
Copyright ?2018 黑澤明軍
【轉載文章務必保留出處和署名,謝謝!】

總結

以上是生活随笔為你收集整理的day10_cookiesession学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。