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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别

發布時間:2024/4/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

會話技術 – Cookie與Session及其兩者的區別

(一)會話技術

一、概述


1. 一個瀏覽器為了實現某一個功能對服務器產生了多次請求響應。從第一個請求開始訪問服務器,會話開始,到最后一個頁面訪問結束 關閉所有頁面,這個過程中的所有的請求響應加在一起稱之為 瀏覽器和服務器之間產生了一次會話。
2. 會話技術最重要的是會話中產生的數據如何保存 。
1. request域 – 不合適。request太小了,每一次請求都會產生一個新的request , 后續的請求無法讀取到之前請求的request中存放的數據 。
2. servletContext – 不合適。 所有的會話看到的都是同一個ServletContext域 , 所有會話的數據會混雜在一起
3. cookie – 將會話產生的數據存放在客戶端
4. session – 將會話產生的數據保存在服務器中

(二)Cookie

一、概述

  • Cookie是客戶端技術 將會話產生的數據保存在客戶端中
  • 當瀏覽器訪問服務器 服務器可以通過在響應中增加set-Cookie的響應頭 命令瀏覽器保存一段cookie信息
  • 瀏覽器會將cookie信息保存在本地 之后再去訪問服務器時 會自動在請求中 通過cookie請求頭 帶著cookie信息
  • 服務器可以通過解析請求中的cookie請求頭 獲取信息 從而獲取到了之前保存的會話相關的數據
  • 二、基本方法

  • Cookie(String name ,String value) :cookie沒有無參構造方法 , 在創建時就得制定好cookie的名字和值 。
  • getName() : cookie的名字只能獲取不能修改
  • getValue(String name) : 通過名字獲取對應的值
  • setValue(String name , String value) : 通過名字設置對應的值 。
  • response.setCookie(Cookie c): 向響應中添加cookie
  • request.getCookies() : 從請求中獲取所有的cookie
  • 三、cookie保存時長

  • 如果不設置cookie保存時長 , 默認cookie會保存在瀏覽器內存中 , 瀏覽器關時cookie銷毀 , 這種稱之為會話級別的cookie 。
  • 可以通過代碼制定瀏覽器將cookie保存到什么時候 , 瀏覽器收到的 cookie信息中如果包含了cookie超時時間 , 瀏覽器就會把cookie信息以文件的形式保存在瀏覽器的臨時文件夾中 , 保存到指定的時間 , 這段時間內cookie文件一直存在 , 即使對此開關 瀏覽器仍然能夠讀取到這個cookie信息。

    設置超時時間 setMaxAge(int time);//單位是秒 獲取超時時間 getMaxAge()
  • 四、瀏覽器訪問哪些路徑時會攜帶cookie

  • 如果不設置 , 默認在訪問發送cookie給瀏覽器的servlet的父一級目錄及子孫目錄時會攜帶這個cookie 。
  • 可以通過代碼設置瀏覽器在訪問哪些路徑時攜帶這個cookie

    設置路徑 setPath(String path); 獲取攜帶這個cookie的路徑 getPath();
  • 五、刪除cookie

  • java提供的Cookie類中本身沒有刪除一個cookie的方法 , 但是可以通過一些方法實現刪除cookie的效果 。
  • 如果想要刪除一個cookie , 需要發送一個和要刪除的cookie名字相同 , path相同 , 但是maxAge為0的cookie 。
  • 原理: 當發送一個與原cookie名字相同 , path也相同的cookie時 , 原cookie將會被覆蓋 , 但是新cookie的maxAge為0 , 即剛被創建就被刪除 , 從而實現了刪除一個cookie 。
  • 六、Cookie其他

  • 一個Cookie只能標示一種信息 , 他至少含有一個標識信息的名字(name)和設置值(value)。
  • 一個WEB站點可以給一個web瀏覽器發送多個cookie , 一個web瀏覽器也可以存儲多個web站點提供的cookie 。
  • 瀏覽器一般只允許存放300個cookie, 且 每個站點最多 能存放20個從cookie , 每個cookie的大小被限制在4KB以內 。
  • 如果創建了一個cookie,并將他發送到瀏覽器,默認情況下它是一個會話級別的cookie(即存儲在瀏覽器的內存中),用戶退出瀏覽器之后即被刪除。若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,并給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie。
  • 注意:瀏覽器是通過name+path來唯一標示一個cookie的 。 在刪除一個cookie時name和path必須一致 , value可以隨意設置 。
  • 八、案例

  • 登錄時記住用戶名和密碼 。
  • (三)Session

    一、Session概述

  • session時服務器端會話保存技術
  • 服務器在需要時 , 可以為每個用戶創建一個獨一無二的為該用戶服務的session對象 , 其中保存著該用戶會話相關的數據 。
  • 之后該用戶再來訪問服務器時 , 可以找到志強創建的屬于他的session , 從中找到之前 保存的數據 。 從而實現會話數據的保存 。
  • 由于每個用戶各自有各自的session , 每一個session只為對應的用戶服務 , 所以數據不會產生混亂 。
  • 二、session是一個域對象

  • 生命周期:
  • 當第一次調用request。getSession()方法時表明會話中需要硬session來服務了, 此時服務器會創建一個session對象 , 一直駐留在內存中為當前會話服務 。
  • session有三種銷毀方式:
  • 自殺: 可以通過明確調用session.invalidate()方法立即殺死當前session 。
  • 壽終正寢 : session默認發呆時間為30分鐘 , 如果超過30分鐘沒有用戶使用這個session , 則服務器會認為這個session超時 , 殺死會話對應的session 。
  • 意外身亡 : 當web應用銷毀時 , session也隨之銷毀 。
  • 作用范圍: 整個會話
  • 主要功能: 在會話范圍內共享數據
  • 三、常用方法

  • 創建、獲取session

    獲取一個session對象 , 如果當前 會話已經有session對象 , 則直接獲取 , 如果沒有則創建 request.getSession(); 當傳入的值為true時 , 與上面的方法相同 ; 如果傳入的參數為false時 , 當前會話存在session時直接獲取 , 不存在時返回null request.getSession(boolean b);
  • 操作域

    //設置session數據 session.setAttribute(); //獲取session數據 session.getAttribute(); //移除session數據 session.removeAttribute();
  • 殺死session

    session.invalidate()
  • 四、案例

  • 利用session實現登錄 、 注銷
  • 登錄
  • 所謂的登錄其實就是用戶提交用戶名和密碼 后檢查數據庫
  • 如果不正確就跳轉回登錄界面并提示用戶重新輸入
  • 如果正確則創建 session保存該用戶的登錄標記
  • 在之后的訪問中可以通過 檢查登錄 標記貨值該用戶 是否登錄 , 如果登錄過 ,該用戶是誰 。
  • 注銷
  • 所謂的注銷其實就是殺死session,使session中的登錄標記失效 。
  • 驗證碼校驗
  • 驗證碼圖片生成之后將圖片發送至頁面 , 并且將驗證碼中的內容存入session中備用
  • 用戶提交參數后 ,從請求中獲取驗證碼參數 , 再從session中獲取驗證碼 元數據 , 兩者比對
  • 如果驗證碼不通過返回注冊頁面 數據回顯
  • 數據回顯
  • 數據在發送前被存放在request域中在進行發送
  • 如果后臺校驗不通過 , 則請求轉發回注冊頁面
  • 此時request還是發送請求時的那個request , 直接從中取相應的值就行 。
  • 五、session原理

  • 實際上session是基于一個叫做jsessionid的 cookie工作的 。
  • 當瀏覽器訪問服務器調用到request.getSession()時 , 此方法會檢查請求中是否有叫做jsessionid的cookie 。如果沒有 , 則說明這是第一次用到session , 此時服務器會自動創建一個session使用 , 并將sessionid作為name為jsessionid的cookie的值發送給瀏覽器保存 。瀏覽器在后續的訪問中 , 就會帶著 這個jsessionid來訪問 , 后續再調用到request.getSession()時, 此方法會檢查請求中是否有叫做jsessionid的cookie , 如果有則在瀏覽器內存中找jsessionid對應的session使用 。 如果找不到 , 說明session已經被銷毀 ,則創建一個新的session使用 , 并在響應中發送新的jsessionid 。
  • 六、cookie被禁用后session無法被使用的情況

  • 如果禁用了cookie session也就用不了了 - 可以通過URL重寫來解決
  • 如果禁用了cookie 瀏覽器不再基于cookie來保存jsessionid 在服務器無法獲取到jsessionid 也就無法找對應的session
  • 所以想解決這個問題 就需要想辦法 將jsessionid的值 帶給服務器。此時可以使用URL重寫的技術來實現
  • URL重寫

  • 所謂的URL的重寫 就是 將地址 改寫 在地址后使用特殊的參數 攜帶jsessionid的技術 。
  • 雖然cookie用不了了 但是 通過地址 仍然可以攜帶jsessionid的信息 從而使用session
  • 這個技術 需要將應用中所有的地址都要進行URL重寫 相對來說非常麻煩
  • 而這么麻煩帶來的唯一的好處是 禁用cookie后仍然可以使用session 似乎并不值得這么麻煩
  • 所以 現在很多網站 都不會去做URL重寫 對于禁用cookie的情況 不處理 或者 檢測到用過戶禁用cookie就引導用戶 打開瀏覽器的cookie 再來使用網站
  • 示例:

    response.encodeURL(String url); //--如果是普通的地址用這個方法 response.encodeRedirectURL(String url); //--如果地址是用來進行重定向的,用這個方法
  • (四)Cookie與session的區別

  • cookie將會話相關數據保存在客戶端 ; session將會話相關的數據保存在服務器端
  • cookie可以保存的時間比較長; session超過30分種沒人用就銷毀
  • cookie有可能隨著用戶的操作被清除 ;session只要不手動刪除 在存活期間可以可靠的訪問
  • cookie將信息保存在瀏覽器中 可以通過翻臨時文件夾 查看cookie中的數據 不安全; session將會話相關的數據保存在服務器內存中 安全性高很高。
  • 如果需要將會話數據保存的很久 – cookie
  • 如果希望會話數據不會因為用戶的操作丟失 – session
  • 如果會話數據比較在意安全性 – session
  • 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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