cookie和session對比
cookie特點:
1) 會話數據存放在瀏覽器
2) 數據類型只能是String,而且有大小限制
3) 數據存放不安全
session特點:
1)會話數據存放在服務器(服務器內存)
2) 數據類型任意,沒有大小限制
3) 相對安全
cookie技術原理
服務器創建cookie對象,保存會話數據,把cookie數據發送給瀏覽器
瀏覽器獲取cookie數據,保存到瀏覽器緩存區,然后在下次訪問服務器攜帶cookie數據
服務器獲取瀏覽器發送的cookie數據
cookie簡單使用
//1. 創建cookie對象,保存會話數據
Cookie cookie = new Cookie("name", "yangqing");
//2. 把cookie發送給瀏覽器,通過響應頭攜帶cookie給瀏覽器
// response.setHeader("set-cookie", "name=yangqing");
//簡化方式:
response.addCookie(cookie);
//3. 瀏覽器在下次訪問的時候攜帶cookie數據,通過請求頭發送給服務器
//瀏覽器自發進行
//4. 服務器獲取瀏覽器發送的cookie
//(1)String name = request.getHeader("cookie");
//System.out.println(name);
//(2)
Cookie[] cookies = request.getCookies();
for(Cookie c:cookies){
String name = c.getName();
String value = c.getValue();
System.out.println(name+": "+value);
}
cookie細節
cookie的數據類型一定是字符串,如果發送中文,需要通過URLEncoder進行加密,和URlDecoder進行解密。
setPath(path):默認情況下,是當期項目的根目錄下,可以通過setpath更改,如果把該cookie設置到某個有效路徑下,只有當訪問該有效路徑的時候才會攜帶該cookie信息
setMaxAge(整數): 設置cookie的有效時間。
正整數:表示超過了正該值cookie會丟失(cookie保存到瀏覽器的緩存中),單位:秒。
負整數:表示如果瀏覽器關閉了,cookie就會消失(cookie保存在瀏覽器的內存中)
0:表示刪除同名的cookie
cookie可以有多個,瀏覽器一般存放300個cookie,每個站點最多存放20個,每個cookie大小限制為4K
Session原理
1 服務器創建session對象,服務器給這個session對象分配一個唯一的標記JSESSIONID
2 把JSESSIONID作為cookie發送給瀏覽器
3 瀏覽器得到JSESSIONID保存下來,在下次訪問的時候發送給服務器。
4 服務器得到JSESSIONID,在服務器內存中搜索是否存在指定JSESSIONID的session對象
5 如果找到,則返回該session對象
6 如果找不到,可能返回null,也有可能創建一個session。
以上六個步驟,都在下面這句話中執行了。
HttpSession session = request.getSession();
Session使用步驟
創建HttpSession對象,用於保存會話數據。
request.getSession();//創建或獲取session
修改HttpSession對象
setMaxInactiveInterval();
保存會話數據(作為域對象)
session.setAttribute(“name”, “yangqing”);
//創建或者獲取session對象
HttpSession session = request.getSession();
//修改session
session.setMaxInactiveInterval(20);//20秒后session對象將要被銷毀
//保存會話數據(作為域對象)
session.setAttribute("name", "yangqing");
session細節
1 setMaxInactiveInterval(秒):設置session對象的有效時間
可以在web根目錄下統一設置session有效期
<!-- 設置全局的session有效期(分鍾) -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
問題:session在什么時候會銷毀
默認情況下:30分鍾后銷毀
2 設置JSESSIONID不會隨着瀏覽器的關閉而關閉
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(1*30*24*60*60);//設置一個月的有效期
response.addCookie(cookie);
3 通過invalidate()方法直接銷毀session對象
4 request.getSession()//request.getSession(true):查詢session對象,如果沒有session對象,創建新的
request.getSession(false):如果沒有session對象,返回null。
---------------------
作者:菩薩笑了
來源:CSDN
原文:https://blog.csdn.net/u012920206/article/details/52518622
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
