會話技術 cookie和session 學習筆記
什麼是會話
基本概念: 指使用者開一個瀏覽器,訪問一個網站,只要不關閉該瀏覽器,不管該使用者點選多少個超連結,訪問多少資源,直到使用者關閉瀏覽器,整個這個過程我們稱為一次會話.
一、cookie詳解
cookie小結
- cookie 是在服務端建立
- cookie 是儲存在瀏覽器這端
- cookie 的生命週期可以通過:
cookie.setMaxAge(2000);
☞ 如果不設定setMaxAge則該cookie的生命週期當瀏覽器關閉時,就消亡. - cookie 可以被多個瀏覽器共享(與session的區別)
- 怎麼形象的理解?
我們可以把cookie 想成一張表(或者一個字典)
如果cookie重名會有什麼問題?
如果重名就會替換存在的cookie值. - 一個web應用可以儲存多個cookie,但儲存在同一個cookie文字在客戶端瀏覽器下
- cookie存放的時候是以明文方式存放,因此安全較低.,我們可以通過加密後儲存
- cookie預設生命週期是會話級別,可以通過setMaxAge() 可以設定生命週期
setMaxAge(正數) , 即多少秒後該cookie失效
setMaxAge(0) ,刪除該cookie
setMaxAge(負數), 相當於該cookie生命週期是會話級別。
//先得到該cookie
Cookie cookies[]=request.getCookies();
for(Cookie cookie: cookies){
if(cookie.getName().equals("id")){
System.out.println("id");
//刪除
cookie.setMaxAge(0);
//一定帶上這句話,否則不能刪除
response.addCookie(cookie);
}
}
特別說明: 如果該web應用只有一個cookie ,則刪除該cookie後,在瀏覽器的臨時資料夾下沒有該cookie檔案,如果該web應用有多個cookie,則刪除一個cookie後,檔案還在,只是該cookie沒有了。
2、cookie的細節
- 一個瀏覽器最多放入 300cookie,一個web站點,最多 20cookie,而且一個cookie大小限制子4k
- cookie存放中文,怎麼處理?
存放:
String val=java.net.URLEncoder.encode("我是名字","utf-8");
Cookie cookie=new Cookie("name",val);
取出:
String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("name ="+val);
3、cookie可以用來做什麼呢?
- 儲存使用者名稱、密碼,在一定時間不用重新登入
- 記錄使用者訪問網站的喜好,比如有無背景音樂、網頁的背景色是什麼
- 網站的個性化,比如定製網站的服務、內容
4、cookie使用
- 如何建立一個cookie(在伺服器端建立的)
Cookie c=new Cookie(String name, String val);
- 如何將一個cookie新增到客戶端
response.addCookie(c);
- 如何讀取cookie(從客戶端讀到伺服器)
request.getCookie();
5、cookie其它說明
- 可以通過IE——工具——internet選項——隱私——高階來啟用或是禁用cookie
- 由於cookie的資訊是儲存在客戶端的,因此安全性不高
- cookie資訊的生命週期可以在建立時設定(比如30s),從建立那一時刻起,就開始計時,到時該cookie的資訊就無效了
二、session詳解
什麼是session?
當使用者開啟瀏覽器,訪問某個網站時,伺服器就會在伺服器的記憶體為該瀏覽器分配一個空間,該空間被這個瀏覽器獨佔。這個空間就是session空間,該空間中的資料預設存在時間為30min,你也可以修改該值。
上面說的這個30min指的是使用者的發呆時間,而不是累計時間
1、session生命週期
系統預設是30分鐘。
有3種session生命週期的設定:
- 1、一個地方是 tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>//表示30分鐘的意思
</session-config>
對所有的web應用生效
- 2、另外一個地方,就是在單個web應用的下去修改 web.xml
<session-config>
<session-timeout>30</session-timeout>session精確到分鐘,cookie精確到秒
</session-config>
如果發生衝突,則以自己的web應用優先順序高
- 3、session.setMaxInactiveinterval(60) 發呆六十秒後session失效
2、對session和cookie生命週期小結:
3、session小結
- session是存在伺服器的記憶體中
- 一個使用者瀏覽器,獨享一個session域物件
- session中的屬性的預設生命週期是30min ,你可以通過 web.xml來修改
- session中可以存放多個屬性
- session 可以存放物件
- 如果 session.setAttribute(“name”,val) , 如果名字重複,則會替換該屬性.
- 為什麼伺服器能夠為不同的瀏覽器提供不同session?
因為每個瀏覽器去訪問web站點的時候,如果發出的http請求頭沒有帶JSESSIONID頭就會自動給你建立一個並返回。
4、如何使用session?
- 得到session
HttpSession hs=request.getSession(true); - 向session新增屬性
hs.setAttribute(String name,Object val); - 從session得到某個屬性
String name=hs.getAttribute(String name); - 從session中刪除掉某個屬性
hs.removeAttribute(String name); - 登出session中的內容(比較安全的一種方式)
ht.setMaxInactiveInterval(0);
三、cookie與session的比較
- 存在的位置
cookie:存在客戶端的臨時資料夾
session:存在伺服器記憶體中,一個session域物件為一個使用者瀏覽器服務 - 安全性
cookie:是以明文的方式放在客戶端的,安全性弱,可以通過(MD5)加密再存放。
session:是存放在伺服器記憶體中,所有安全性好 - 網路傳輸
cookie:會傳遞資訊給伺服器
session的屬性值不會給客戶端 - 生命週期
cookie的生命週期:是累計時間,即如果我們給cookie設定setMaxAge(30),則30秒後失效。
session的生命週期:是間隔時間,如我們設定session 20min,指在20min內,如果沒有訪問session,則session失效(session失效是指無法讀取session屬性),
在以下情況session也會失效
(1)關閉tomcat
(2)reload web應用
(3)時間到
(4) 呼叫invalidate方法 - 訪問範圍
cookie:為多個使用者瀏覽器共享。
session:為一個使用者瀏覽器獨享。 - 使用原則
因為session會佔用伺服器的記憶體,因此不要向session中存放過多過大的物件,會影響效能。
本文部分內容參考網路及韓順平老師的講義
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- nodejs學習08——會話控制 session cookie tokenNodeJS會話SessionCookie
- web前端學習教程:Cookie會話跟蹤技術Web前端Cookie會話
- 會話層技術-cookie會話Cookie
- 會話技術之Cookie會話Cookie
- 會話層技術-session會話Session
- 會話技術之 Session會話Session
- java基礎學習:JavaWeb之Cookie和SessionJavaWebCookieSession
- Session會話筆記,維護一個客戶端和伺服器之間關聯的一種技術Session會話筆記客戶端伺服器
- cookie和session有什麼區別?Python學習!CookieSessionPython
- Cookie和SessionCookieSession
- session和cookieSessionCookie
- cookie 和 sessionCookieSession
- Java學習筆記(七十二)—— CookieJava筆記Cookie
- 巨杉核心筆記(一)| SequoiaDB 會話(session)簡介筆記會話Session
- JAVA核心技術學習筆記--反射Java筆記反射
- cookie和session有什麼區別?Python學習分享CookieSessionPython
- HTML5入門教程 :Cookie會話跟蹤技術HTMLCookie會話
- 【Javaweb】Cookie和SessionJavaWebCookieSession
- LLM學習筆記-長度外推技術筆記
- java學習路程(javaEE)之獲取表單資料、獲取引數、request域、會話技術(Cookie)Java會話Cookie
- 狂神說Java Web學習筆記_CookieJavaWeb筆記Cookie
- 人工智慧:原理與技術 學習筆記人工智慧筆記
- laravel操作session和cookieLaravelSessionCookie
- 關於Session和CookieSessionCookie
- session和cookie關係SessionCookie
- Session和Cookie機制SessionCookie
- 撩下Cookie和SessionCookieSession
- 《52講輕鬆搞定網路爬蟲》讀書筆記 - Session和Cookie爬蟲筆記SessionCookie
- Cookie和Session有什麼不同?學習web網路安全得多久CookieSessionWeb
- 產品幾何技術規範 學習筆記筆記
- 令牌Token和會話Session原理與攻略會話Session
- TensorFlow學習之會話Sesstion()和互動會話InterativeSesstion()會話
- Django框架之Cookie和SessionDjango框架CookieSession
- 對session和cookie的理解SessionCookie
- Tomcat 中的 Session 和 CookieTomcatSessionCookie
- localStorage 與 sessionStorage / cookie 和 sessionSessionCookie
- cookie和session的區別CookieSession
- 聊一聊session和cookieSessionCookie
- nodeJS之Cookie和Session(一)NodeJSCookieSession