Cookie,Session,Application对象
一、Cookie
1、存储在浏览器上、只能存放字符串、不安全
2、默认生命周期是程序员创建、浏览器关闭销毁、亦可设置过期时间自动销毁
3、Cookie可以通过response来读写、亦可通过JS来读写
Cookie常用方法
方法 | 作用 |
---|---|
setDomain()、getDomain() | 设置获取Cookie的域名 |
setMaxAge()、getMaxAge() | 设置获取Cookie的过期时间 |
getName() | 返回cookie的名称 |
setValue()、getValue() | 设置获取Cookie的值 |
setSecure() | 传输过程的value加密、不是值加密(其实每意义,因为可以看到) |
服务器操作Cookie:获取浏览器的Cookie用request对象、写入Cookie用response对象
//创建Cookie
Cookie cookie=new Cookie("key001", "aaaaaaaaaaaaaa");
//设置Cookie过期时间、单位秒
cookie.setMaxAge(30);
//Cookie写入浏览器
resp.addCookie(cookie);
//获取浏览器请求的所有Cookie对象
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
JavaScript操作Cookie【注意:Cookie存储的path路径不同、是不会默认携带到服务器的,默认path路径是当前路由地址】
//-------------------------------可使用下面的工具类来读写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();
}
//设置cookie和过期时间(单位是秒)
function setCookie(name, value, time) {
var exp = new Date();
exp.setTime(exp.getTime() +time*1000);
var expires = "expires="+exp.toGMTString();
//设置key和value、以及过期事件
document.cookie = name + "=" + escape(value) + " ;" + expires;
}
二、Session【HttpSession】的使用
1、Http协议是无状态协议、无法记录多次请求的浏览器信息、但有时候需要记录同一个浏览器多次请求服务器,故需要使用Session对象来记录多次请求的浏览器信息
2、Session的生命周期:浏览器第一次请求服务器创建、关闭浏览器默认销毁、或30分钟(可设置)内没有请求服务器亦销毁
3、Session对象存储在服务器端、浏览器只存放了一个SessionId的身份令牌
4、Session实现原理:浏览器第一次请求服务器,服务器会创建一个cookie,key是JSESSIONID、value是sessionid、然后把这个cookie存储在浏览器上、后面每一次请求、浏览器携带这个Cookie去服务器验证
5、Session的缺陷:
a、【容易泄漏】、当用户关闭浏览器时、session并没有及时销毁、而是等tomcat去判断session过期后才销毁、故即便用户关闭浏览器后、依然容易被非法人员拿到session继续操作,同理用户拿到sessionid后也可模拟浏览器请求;
b、第一次请求服务器创建【这点并不合理】、绝大部分需求是用户登陆后创建更合理、故大项目使用Token更合理、更节约资源
HttpSession常用方法
方法名 | 作用 |
---|---|
getAttribute() | 获取Session的属性值 |
getCreationTime() | 获取Session的创建时间 |
getId() | 获取Session的id |
getLastAccessedTime() | 返回最后发送请求的时间 |
getMaxInactiveInterval() | 获取Session的过期时间、单位秒 |
invalidate() | 销毁session |
isNew() | 判断是否是一个新的用户 |
removeAttribute() | 删除一个属性 |
setAttribue() | 设置一个属性 |
三、Application对象的使用
1、Application(ServletContext) 应用程序级别,整个项目共享、所有的Servlet共享
2、关闭服务器销毁,可以理解成 static 资源
方法 | 作用 |
---|---|
setAttribute()、getAttribute() | 设置获取Application属性 |
getInitParameter() | 获取应用程序初始化的传输在web.xml配置初始化传输 |