异同:cookie是客户端的对象,key-value键值对形式,只能存储String类型,数据量小,大约4k, 由于是存储在客户端安全性小
session是服务器对象,key-value简直对形式,但是存储的是Object,数据量大,储存于服 务器,安全性较高。
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,主要浏览器没有关闭,这个session就存在
- 用户登录后,整个网站它都可以访问——>保存用户的信息
方法:cookie
//从请求中获取Cookie 这里是数组形式,不止有一个
Cookie[] cookies = req.getCookies();
//判断Cookie是否存在
if (cookies!=null){
//如果存在怎么办
out.write("When was your last visit: ");
for (int i = 0; i <cookies.length ; i++) {
Cookie cookie = cookies[i];
//或缺Cookie的名字
if(cookie.getName().equals("LastLoginTime")){
//获取cookie中的值
long LastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(LastLoginTime);
out.write(date.toLocaleString());
}
}
}else {
System.out.println("This is your first visit");
}
//服务器给客户端响应一个Cookie
Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
//给cookie设置有效期为一天
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);
session:
//获得Session
HttpSession session = req.getSession();
//给Session存东西
// session.setAttribute("name","小狗");
session.setAttribute("name",new Person(18,"小红",123456789));
//获取Session的id
String id = session.getId();
System.out.println(id);
//判断Session是不是新创建的
boolean aNew = session.isNew();
if (aNew){
resp.getWriter().println("session创建成功! session id 为: "+id);
}else {
resp.getWriter().println("session已经创建了id 为: "+id);
}
//session在创建的时候做了啥? 将自己的sessionId,放到cookie中,传给客户端
//下次客户端请求的时候,Cookie就会根据这个sessionId找到对象的服务器上session对象
//从而可以从sessionId中获取其他属性,比如name=小狗
//Cookie cookie = new Cookie("SESSIONID", id);
//resp.addCookie(cookie);
每次新打开一个浏览器访问地址,都会新建一个session会话,也会向客户端存储一个值为sessionId的cookie!
session可以手动销毁,也可以设置失效时间
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();//注销
<!--设置Session默认的失效时间-->
<session-config>
<!--15分钟后Session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>