Cookie与Session相关学习笔记
一.會話技術
會話: 為了實現某一個功能, 瀏覽器和服務器之間可能會產生多次的請求和響應, 從瀏覽器訪問服務器開始, 到最后瀏覽器關閉, 這期間產生的多次請求和響應就稱之為瀏覽器和服務器之間的一次會話!
二.Cookie
1.Cookie概述
Cookie是將會話中產生的數據保存在客戶端, 是客戶端的技術.
瀏覽器訪問服務器, 服務器獲取到要保存的數據后, 會通過Set-Cookie響應頭將數據再響應給瀏覽器, 瀏覽器收到后會保存在內部.
當瀏覽器再次訪問服務器, 會通過Cookie請求頭帶著上次保存的數據, 服務器可以通過Cookie請求頭獲取數據, 通過這種方式可以保存會話中產生的數據!!
由于Cookie技術是將數據保存在客戶端, 每個客戶端都持有自己的數據, 需要時會帶給服務器, 因此不會發生混亂
2.Cookie使用
SUN為了簡化Cookie的操作, 提供了一套Cookie的API:
(1)創建Cookie
Cookie cookie = new Cookie(name, value);
getName();//獲取Cookie的名字
getValue();//獲取Cookie的值
setValue();//設置Cookie的值
setMaxAge();//設置Cookie的最大生存時間
如果不設置該方法, Cookie默認是會話級別的Cookie, Cookie是保存在瀏覽器的內存中, 瀏覽器一旦關閉, Cookie會隨著瀏覽器內存的釋放而銷毀!!
如果不希望瀏覽器關閉后Cookie跟著銷毀: 可以設置setMaxAge方法, 設置之后Cookie會以文件的形式保存在瀏覽器的臨時文件夾中. 即使多次開關瀏覽器, 內存釋放了但是文件依然在硬盤上, 所以不會丟失!
setPath();//設置Cookie在瀏覽器訪問哪一個路徑及其子孫路徑時會被帶過去
如果不設置該方法, Cookie默認會在瀏覽器訪問發送Cookie的Servlet所在的路徑及其子孫路徑時將會被帶過去, 如:
發送Cookie的Servlet:
http://localhost/day12/servlet/CookieDemo2
默認的路徑則為:
localhost/day12/servlet/
http://localhost/day12/servlet/
即瀏覽器在訪問上面這個路徑及其子孫路徑時才會帶著Cookie
如果希望訪問當前WEB應用下任何一個資源時都會帶著Cookie, 應該把路徑設置為WEB應用的根路徑
//setPath(request.getContextPath());
setPath(request.getContextPath()+"/");//后面加斜杠是為了避免缺省web應用getContextPath()方法返回空字符串的情況!!
(2) 發送Cookie
response.addCookie(Cookie cookie);//添加Cookie到response對象中, 可以多次調用此方法來添加多個Cookie
(3) 獲取Cookie
request.getCookies();//返回多個Cookie對象組成的數組, 如果沒有Cookie, 該方法返回null.
(4) 刪除Cookie
Cookie沒有提供直接刪除Cookie的方法
如果要刪除Cookie, 可以向瀏覽器發送一個同名、同path的Cookie,再設置Cookie的最大生存時間(setMaxAge)為0, 由于瀏覽器是根據Cookie的名字/path來區分是否是同一個Cookie, 所以后發的Cookie會把之前的Cookie覆蓋掉, 而后發是Cookie生存時間為0, 瀏覽器收到后也會立即刪除.通過這種方式來刪除Cookie!!!
案例: 在網頁中顯示上次訪問時間.
略
案例: EasyMall項目_記住用戶名功能實現
其他:
1 瀏覽器一般只允許存放200個Cookie,每個站點最多存放20個Cookie,每個Cookie大小限制為4KB,因此Cookie不會塞滿用戶的硬盤。
2 Cookie的安全問題
三.Session
Session是將會話中產生的數據保存在服務器端, 是服務器端的技術
1.Session是一個域對象
setAttribute(String name, Object value);
getAttrubute(String name);
removeAttribute(String name);
getAttrubuteNames();
生命周期:
第一次調用request.getSession();方法時創建Session, Session銷毀的時機有三種:
超時: 如果一個Session 30分鐘(默認是30分鐘, 可以在web.xml根標簽下添加一個來修改超時時間)未被使用, 那么該session會超時銷毀!!
自殺: 當調用session.invalidate()方法時, 將會立即殺死session.
意外身亡: 如果服務器非正常關閉, session也會銷毀!!
如果服務器正常關閉, 服務器中所有的session將會以文件的形式保存在tomcat服務器的work目錄下, 這個過程稱之為session的鈍化. 如果再次啟動服務器, 鈍化著的session也會再次恢復回來, 這個過程叫做session的活化.
作用范圍:
一次會話
主要功能:
在整個會話范圍內實現數據的共享
獲取session的三種方式:
request.getSession(); // 如果服務器有session就直接返回, 如果沒有就創建一個session再返回
request.getSession(true); // 如果服務器有session就直接返回, 如果沒有就創建一個session再返回
request.getSession(false);// 如果服務器有session就直接返回, 如果沒有就直接返回null.
阻止服務器在瀏覽器訪問jsp時, 默認創建session的問題: <%@ page language=“java” import=“java.util.*” pageEncoding=“utf-8” session=“false”%>
可以在page指令中添加一個session屬性, 該屬性的值默認為true, 即服務器在瀏覽器訪問jsp時會默認創建session, 如果改為false, session將不會在瀏覽器訪問jsp時默認被創建!!
案例: 購物車案例
2.session的細節:
Session是基于一個JSESSIONID的Cookie工作的!
(1) 在瀏覽器關閉之后再次啟動時, 如何獲取關閉之前的session??
瀏覽器關閉之后, 導致服務器發送的Cookie銷毀, 保存在其中的Session id也跟著丟失, 由于id丟失了, 所以找不到之前的Session了
解決方案: 在服務器創建session之后, 可以再發一個同名/同path的Cookie, 將Cookie的最大生存時間設置為有效時間, 讓Cookie保存在硬盤上, 即使多次開關瀏覽器, 雖然服務器發送的Cookie已經丟失了, 但是我們自己發送的Cookie仍然存在, 所以可以找到之前的session!!
(2) 如果Cookie被禁用了, 如何獲取Session???
URL重寫: 通過response上提供的方法, 將session的id作為參數拼接到url的后面, 再返回一個新的url, 當用戶點擊新的url訪問服務器時, 拼在url后面的id也會隨著請求帶給服務器!!
//在url后面拼接上Session的id
response.encodeURL("");
response.encodeRedirectUrl("");
案例: EasyMall項目_登陸功能實現
//0.處理亂碼問題
//1.獲取請求參數
//>>記住用戶名
//2.根據用戶名和密碼查詢用戶
//如果沒有查詢記錄, 跳轉回登陸頁面提示
//查詢到記錄, 去登陸
//>>在session中保存用戶的信息(用戶名)
//3.登陸成功跳轉回首頁
//4.在首頁的頭部jsp中添加如下判斷:
<% if(request.getSession(false) == null || request.getSession().getAttribute(“user”) == null){ %>
登錄??|??
注冊
<% }else{ %>
歡迎, <%= request.getSession().getAttribute(“user”) %> 回來??|??
退出
<% } %>
案例: EasyMall項目_驗證碼校驗
修改easymall項目中的相對路徑, 改為絕對路徑.
三.Cookie和Session的比較:
> Cookie是將會話中產生的數據保存在客戶端, 是客戶端的技術
> Session是將會話中產生的數據保存在服務器端, 是服務器端的技術
> Cookie保存的信息的時間比較長, 但是安全性不高. 可能隨著用戶的操作, Cookie會被清空, 所以Cookie存儲數據的穩定性比較差. 因此Cookie適合存放要保存時間較長, 但安全性要求不高的信息
> Session通常保存信息的時間比較有限, 但安全性比較高, 因為是保存在服務器端, 不會隨著用戶的操作而導致Session意外丟失, 因此session適合存放安全性要求比較高, 但是不需要長時間保存的數據.
總結
以上是生活随笔為你收集整理的Cookie与Session相关学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用c优缺点_Python调
- 下一篇: 的计时器设置_【教程】PPT课件中常见的