Cookie,Session,Application對(duì)象
一、Cookie
1、存儲(chǔ)在瀏覽器上、只能存放字符串、不安全
2、默認(rèn)生命周期是程序員創(chuàng)建、瀏覽器關(guān)閉銷毀、亦可設(shè)置過(guò)期時(shí)間自動(dòng)銷毀
3、Cookie可以通過(guò)response來(lái)讀寫(xiě)、亦可通過(guò)JS來(lái)讀寫(xiě)
Cookie常用方法
| 方法 | 作用 |
|---|---|
| setDomain()、getDomain() | 設(shè)置獲取Cookie的域名 |
| setMaxAge()、getMaxAge() | 設(shè)置獲取Cookie的過(guò)期時(shí)間 |
| getName() | 返回cookie的名稱 |
| setValue()、getValue() | 設(shè)置獲取Cookie的值 |
| setSecure() | 傳輸過(guò)程的value加密、不是值加密(其實(shí)每意義,因?yàn)榭梢钥吹? |
服務(wù)器操作Cookie:獲取瀏覽器的Cookie用request對(duì)象、寫(xiě)入Cookie用response對(duì)象
//創(chuàng)建Cookie
Cookie cookie=new Cookie("key001", "aaaaaaaaaaaaaa");
//設(shè)置Cookie過(guò)期時(shí)間、單位秒
cookie.setMaxAge(30);
//Cookie寫(xiě)入瀏覽器
resp.addCookie(cookie);
//獲取瀏覽器請(qǐng)求的所有Cookie對(duì)象
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
JavaScript操作Cookie【注意:Cookie存儲(chǔ)的path路徑不同、是不會(huì)默認(rèn)攜帶到服務(wù)器的,默認(rèn)path路徑是當(dāng)前路由地址】
//-------------------------------可使用下面的工具類來(lái)讀寫(xiě)Cookie--------------------------
//讀取cookies
function getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if(arr = document.cookie.match(reg)) return unescape(arr[2]);
else return null;
}
//刪除cookies
function delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if(cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
//設(shè)置cookie和過(guò)期時(shí)間(單位是秒)
function setCookie(name, value, time) {
var exp = new Date();
exp.setTime(exp.getTime() +time*1000);
var expires = "expires="+exp.toGMTString();
//設(shè)置key和value、以及過(guò)期事件
document.cookie = name + "=" + escape(value) + " ;" + expires;
}
二、Session【HttpSession】的使用
1、Http協(xié)議是無(wú)狀態(tài)協(xié)議、無(wú)法記錄多次請(qǐng)求的瀏覽器信息、但有時(shí)候需要記錄同一個(gè)瀏覽器多次請(qǐng)求服務(wù)器,故需要使用Session對(duì)象來(lái)記錄多次請(qǐng)求的瀏覽器信息
2、Session的生命周期:瀏覽器第一次請(qǐng)求服務(wù)器創(chuàng)建、關(guān)閉瀏覽器默認(rèn)銷毀、或30分鐘(可設(shè)置)內(nèi)沒(méi)有請(qǐng)求服務(wù)器亦銷毀
3、Session對(duì)象存儲(chǔ)在服務(wù)器端、瀏覽器只存放了一個(gè)SessionId的身份令牌
4、Session實(shí)現(xiàn)原理:瀏覽器第一次請(qǐng)求服務(wù)器,服務(wù)器會(huì)創(chuàng)建一個(gè)cookie,key是JSESSIONID、value是sessionid、然后把這個(gè)cookie存儲(chǔ)在瀏覽器上、后面每一次請(qǐng)求、瀏覽器攜帶這個(gè)Cookie去服務(wù)器驗(yàn)證
5、Session的缺陷:
? a、【容易泄漏】、當(dāng)用戶關(guān)閉瀏覽器時(shí)、session并沒(méi)有及時(shí)銷毀、而是等tomcat去判斷session過(guò)期后才銷毀、故即便用戶關(guān)閉瀏覽器后、依然容易被非法人員拿到session繼續(xù)操作,同理用戶拿到sessionid后也可模擬瀏覽器請(qǐng)求;
? b、第一次請(qǐng)求服務(wù)器創(chuàng)建【這點(diǎn)并不合理】、絕大部分需求是用戶登陸后創(chuàng)建更合理、故大項(xiàng)目使用Token更合理、更節(jié)約資源
HttpSession常用方法
?
| 方法名 | 作用 |
|---|---|
| getAttribute() | 獲取Session的屬性值 |
| getCreationTime() | 獲取Session的創(chuàng)建時(shí)間 |
| getId() | 獲取Session的id |
| getLastAccessedTime() | 返回最后發(fā)送請(qǐng)求的時(shí)間 |
| getMaxInactiveInterval() | 獲取Session的過(guò)期時(shí)間、單位秒 |
| invalidate() | 銷毀session |
| isNew() | 判斷是否是一個(gè)新的用戶 |
| removeAttribute() | 刪除一個(gè)屬性 |
| setAttribue() | 設(shè)置一個(gè)屬性 |
三、Application對(duì)象的使用
1、Application(ServletContext) 應(yīng)用程序級(jí)別,整個(gè)項(xiàng)目共享、所有的Servlet共享
2、關(guān)閉服務(wù)器銷毀,可以理解成 static 資源
| 方法 | 作用 |
|---|---|
| setAttribute()、getAttribute() | 設(shè)置獲取Application屬性 |
| getInitParameter() | 獲取應(yīng)用程序初始化的傳輸在web.xml配置初始化傳輸 |
posted on 2022-01-19 11:14 小雞炸 閱讀(86) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)