Cookie&Session筆記
會話技術
會話:一次會話中包含多次請求和響應
一次會話:瀏覽器第一次給伺服器資源傳送請求,會話建立,直到有一方斷開為止
功能:在一次會話的範圍內的多次請求間共享資料
方式:
客戶端會話技術:Cookie
伺服器端會話技術:Session
Cookie
概念:客戶端會話技術,將資料儲存到客戶端
快速入門
使用步驟:
1.建立Cookie物件,繫結資料
new Cookie(String name,String value)
2.傳送Cookie物件
response.addCookie(Cookie cookie)
3.獲取Cookie,拿到資料
Cookie[] request.getCookies()
實現原理
基於響應頭set-cookie和請求頭cookie實現
cookie的細節
1.一次可以傳送多個cookie,通過建立多個Cookie物件,使用response呼叫多次addCookie方法傳送Cookie即可
2.cookie在瀏覽器中儲存時間
預設情況下,當瀏覽器關閉後,Cookie資料被銷燬
持久化儲存:setMaxAge(int seconds)
正數:將Cookie資料寫到硬碟的檔案中持久化儲存,並指定cookie的存活時間
負數:預設值
零:刪除cookie資訊
3.cookie儲存中文
tomcat8之前cookie中不能直接儲存中文資料
需要將中文資料轉碼–一般採用URL編碼
在tomcat8之後,cookie支援中文資料,特殊字元還是不支援,建議使用URL編碼儲存,URL編碼解碼
4.cookie共享問題
在一個tomcat伺服器中部署的多個web專案中,預設情況下cookie不能共享
setPath(String path):設定cookie的獲取範圍,預設情況下,設定當前虛擬目錄,如果要共享可以設定path為"/"
不同的tomcat伺服器間cookie共享問題
setDomain(String path):如果設定一級域名相同,那麼多個伺服器之間cookie可以共享
setDomain(".baidu.com"),那麼tieba.baidu.com和news.baidu.com中cookie可以共享
5.Cookie的特點和作用
1.cookie儲存資料在客戶端瀏覽器
2.瀏覽器對於單個cookie的大小有限制(4kb)以及對同一個域名下的cookie數量也有限制(20個)
作用
1.cookie一般用於儲存少量的不太敏感的資料
2.在不登陸的情況下,完成伺服器對客戶端的身份識別
JSP入門學習
概念:
Java Server Pages:java伺服器端頁面
可以理解為:一個特殊的頁面,其中既可以指定定義html標籤,又可以定義java程式碼
用於簡化書寫
原理:
JSP本質上就是一個Servlet
JSP指令碼:JSP定義Java程式碼的方式
1.<% 程式碼%>:定義的java程式碼,在service方法中,service方法中可以定義什麼,該指令碼中就可以定義什麼
2.<%! 程式碼%>:定義的java程式碼,在jsp轉換後的java類成員位置
3.<%= 程式碼%>:定義的java程式碼,會輸出到頁面上,輸出語句中可以定義什麼,該指令碼就可以定義什麼
jsp的內建物件
在jsp頁面中不需要獲取和建立,可以直接使用的物件
jsp一共有9個物件
request
response
out:字元輸出流物件,可以將資料輸出到頁面上,和response.getWriter()類似
兩者區別:
在tomcat伺服器真正給客戶端做出響應之前,會先找到response緩衝區資料,再找out緩衝區資料
response.getWriter()資料輸出永遠在out.write()之前
Session:主菜
概念:伺服器端會話技術,在一次會話的多次請求間共享資料,將資料儲存在伺服器端的物件中。HttpSession
快速入門
1.獲取HttpSession物件:
HttpSession session = request.getSession();
2.使用HttpSession物件:
Object getAttribute(String name)
void setAttribute(String name,Object value)
void removeAttribute(String name)
原理
Session的實現依賴於Cookie
細節
1.當客戶端關閉後,伺服器不關閉,兩次獲取的session是否為同一個?
預設情況下不是
如果需要相同,可以建立Cookie,鍵為JSESSIONID,值為session.getId(),設定最大存活時間,讓cookie持久化儲存
Cookie c = new Cookie(“JSESSIONID”,session.getId());
c.setMaxAge(60*60);
response.addCookie©;
2.客戶端不關閉,伺服器關閉後,兩次獲取的session是同一個嗎?
不是同一個,但是要確保資料不丟失,tomcat自動完成以下工作
session的鈍化:在伺服器正常關閉之前,將session物件序列化到硬碟上
session的活化:在伺服器啟動後,將session檔案轉化為記憶體中的session物件即可
3.session什麼時候被銷燬?
1.伺服器關閉
2.session物件呼叫invalidate()方法
3.session預設失效時間30分鐘
選擇配置修改
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session的特點
1.session用於儲存一次會話的多次請求的資料,存在伺服器端
2.session可以儲存任意型別任意大小的資料
session與cookie的區別
1.session儲存資料在伺服器端,cookie在客戶端
2.session沒有資料大小限制,cookie有
3.session資料安全,cookie相對不安全