Cookie和Session

Cookie:把會話數據保存到客戶端的技術,瀏覽器自身具有存儲Cookie數據的能力,同時具備自動攜帶數據的能力
  Session:把會話數據保存到服務端的技術,使用散列的結構存儲數據 依賴cookie
  cookie和session:都是用來存儲會話數據的
            區別:cookie把數據保存在客戶端,session是把數據保存在服務端
                  cookie不便於保存大量數據,由於網絡壓力大。而session能夠保存大量的數據,可是服務器壓力大
                  cookie技術不安全,可能會篡改數據,而session比較安全。
                  session技術依賴於cookie技術。         
Cookie:   存在於:響應頭set-Cookie  請求頭:Cookie   經過請求request獲取 注意cookie不支持中文
    0 工做流程:
        瀏覽器訪問服務器,服務器建立鍵值對的形式(cookie),
        經過響應(響應頭 set-cookie)返回給瀏覽器,
        cookie保存在瀏覽器上,在下次訪問的服務器時候,
        根據 必定的規則 攜帶不一樣的cookie,不是全部的都會攜帶,
        規則:當訪問的url包含此cookie的path的時候,就會攜帶這個cookie;反之不會。
        經過請求(請求頭 cookie)攜帶,服務器就能夠拿到這些cookie。
    1 建立Cookie數據,發送到客戶端,能夠有多個cookie發送到客戶端保存java

[Java] 純文本查看 複製代碼web

?數組

1瀏覽器

2緩存

new Cookie(String name,String value)    //建立tomcat

response.addCookie(cookie) //把cookie數據加入到響應頭中,發送給瀏覽器 放在響應頭中Set-Cookie:username=zhangsan安全

    2 獲取cookie:    //不能獲取指定的cookie 只能經過獲取全部的cookie數據而後服務器

[Java] 純文本查看 複製代碼cookie

?網絡

1

2

3

Cookie[]  request.getCookies() //經過request獲取全部的cookie數據,返回Cookie對象的數組

getName()  //遍歷根據Cookie對象獲取name

getValue() //遍歷根據Cookie對象獲取value

    3 設置cookie有效期:不清除緩存的狀況下,cookie數據默認保存在瀏覽器內存中,默認當瀏覽器關閉後cookie數據清除,
                        跟服務器是否正常關閉無關,數據存儲在瀏覽器
                        若是設置了cookie的有效期,那麼跟是否關閉瀏覽器無關
            手動設置cookie有效期:cookie.setMaxAge(int 秒):設置Cookie的有效期是秒。
                                  默認設置爲負值,則爲瀏覽器進程Cookie(內存中保存),關閉瀏覽器就失效
                                  0秒就是刪除該cookie(前提,必須路徑相同),殺死cookie
                              

[Java] 純文本查看 複製代碼

?

1

2

3

4

cookie = new Cookie("要刪除的cookie的名稱", "")

 cookie.setPath("要刪除cookie的路徑")

 cookie.setMaxAge(0)

 response.addCookie(cookie)

            原理:瀏覽器接收到cookie後,會把數據持久的保存到磁盤上second秒,過時以前始終有效,不管瀏覽器是否關閉
            a.相同鍵名的Cookie(值能夠相同或不一樣)能夠存在於不一樣的路徑下。
            b.刪除時,若是當前路徑下沒有鍵爲"key"的Cookie,則查詢所有父路徑,檢索到就執行刪除操做(每次只能刪除一個與本身最近的父路徑Cookie)
            c.讀取Cookie時只能讀取直接父路徑的Cookie。若是當前路徑爲/test/test2,要讀取的鍵爲"key"。當前路徑讀取後,還要讀取/test,/test讀取後,還要讀取/
            d.在作Java的web項目時,因爲通常的Web服務器(如Tomcat或Jetty)都用Context來管理不一樣的WebApplication,這樣對於每一個Context有不一樣的Path,
                在一個Server中有多個WebApplication時要特別當心,不要設置Path爲/的Cookie,容易誤操做。(固然前提是域名相同)
    4 Cookie路徑的設置:從項目名到資源名前.當訪問的url包含此cookie的path的時候,就會攜帶這個cookie;反之不會
                        同一路徑下不能有重名Cookie,有的話後邊覆蓋前面。不一樣路徑下能夠有重名Cookie。默認的cookie路徑是在根目錄下/day12
                        setPath(「路徑」):cookie的路徑被包含
        cookie默認存儲路徑爲:訪問Servlet的路徑的父路徑 最後一級爲資源名
        一個路徑不存在重名的cookie,不一樣路徑下能夠有重名的cookie。
                  

[Java] 純文本查看 複製代碼

?

1

2

3

4

5

6

cookie:

  url:  /webtest/aa/bb/cc                                          

 當咱們訪問 http://ip:端口/webtest/aa/bb/cc路徑或這個路徑的子路徑時都會攜帶當前cookie

 子路徑:

     http://localhost/webtest/aa/b...

     http://localhost/webtest/aa/b...

                    
    5 注意Cookie不能跨瀏覽器,不支持中文,若是想要想存儲,先把中文用utf-8 編碼存儲亂碼,再解碼
            response中多條set-Cookie設置
Session:服務器端的會話技術,底層依賴Cookie 把JseesionId寫回瀏覽器,瀏覽器關閉後Session也不能使用;經過請求request獲取
         一次會話中僅存在一個session。只要此次會話存在session一直有效
        

[Java] 純文本查看 複製代碼

?

1

2

3

4

JSESSIONID : 

           httpOnly    true

           path    /webtest 

           value    AD063751712C047BD98C8560BF3988B6

        0 工做流程:      
                瀏覽器向服務器發送請求,服務器判斷瀏覽器是否攜帶了惟一標識
              如有惟一標識:
                   服務器會拿着惟一標識去session池中查詢是否有對應的標識
                    如有:直接操做session對象,並把它存放到瀏覽器端
                    若無:服務器會爲其建立一個私有的內存空間,能夠操做session,把標識存放到瀏覽器端
              若無惟一標識:
                    服務器會爲其建立一個私有的內存空間,能夠操做session,把它標識放到瀏覽器端,標識格式JSESSIONID=ASDHAJSADKASDA
        1 獲取session對象:
     

[Java] 純文本查看 複製代碼

?

1

2

3

HttpSession session=request.getSession()

獲取JessionId的方式:

 session.getId();

        2 session是一個域對象:

[Java] 純文本查看 複製代碼

?

1

2

3

setAttribute(String name,Object obj) //設置屬性值

getAttribute(String name) //獲取屬性值

removeAttribute(String name) //移除屬性值

            生命週期:tomcat默認保存session的時間爲30分鐘,                    使用request獲取到的只是cookie的字符串,直接操做不會做用到瀏覽器的cookie,須要新new一個cookie去覆蓋                    建立:java中認爲第一次調用request.getSession()時建立                    銷燬:1 服務器非正常關閉會銷燬,沒有來得及序列化                              正常關閉,重啓服務器都不會銷燬。序列化和反序列化了                              關閉瀏覽器再打開會消失,JsessionId丟失了,找不見了。session並未消失                          2 超時: tomcat中設置的session默認存活時間是30分鐘,配置在web.xml中                                 手動設置存活時間:setMaxInactiveInterval(int interval) //單位是秒                                 超時就會自動銷燬                          3 手動銷燬:session.invalidate()                           做用範圍: 只在一次會話中有效。誰創建的會話在那個會話中有效。不會形成多個用戶訪問數據紊亂                               由於底層依賴Cookie技術,因此默認瀏覽器關閉後也會失效。不能跨web應用。

相關文章
相關標籤/搜索