cookie对象常用方法
- 获取cookie对象
Cookie[] cookies = request.getCookies();
- 获取cookie中的信息
Cookie[] cookies = req.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
System.out.println(cookie.getName()+":"+cookie.getValue());
}
}
- 向cookie写入数据
Cookie cookie1 = new Cookie("name","123"); //新建一个cookie
resp.addCookie(cookie1); //如果cookie的键已经存在,那么它的值会被覆盖
- 设置cookie存活时间
cookie1.setMaxAge(60); //将cookie持久化到文件,60秒后销毁
cookie1.setMaxAge(-1); //cookie信息在浏览器关闭后销毁
cookie1.setMaxAge(0); //如果客户端原本就有值为name的cookie,可以通过这种方式删除
- 设置cookie的共享作用范围
//默认情况下只有同一个web项目下的所有页面以及servlet可以共享cookie
cookie1.setPath("/"); //设置为根路径表示同一个服务器下所有资源共享此cookie
session对象常用API
- 获取session对象
HttpSession session = req.getSession(); - 给session对象存值
session.setAttribute(key,value); - 从session对象取值
Object value= session.getAttribute(key); - 删除session对象中一个键值对
session.removeAttribute(key);
cookie的存活时间
- 默认情况下,当浏览器关闭后cookie便会消失,即cookie存储在浏览器内存中。
- 我们可以在servlet中通过setMaxAge方法设置cookie的存活时间
session对象销毁的时机:
- 服务器关闭
默认情况下,服务器关闭了session对象就会消失,但是tomcat服务器可以自动完成session对象的钝化和活化。
当tomcat服务器正常关闭时,服务器会将内存中的session信息保存到硬盘中。等下次服务器重启时再将硬盘中
session信息读取到内存。 - 30分钟后自动销毁
session对象会在30分钟以后自动销毁,可以通过修改web.xml配置文件修改session的存活时间 - 调用方法手动销毁session
session.invalidate();
会话的持续时间
- 会话的跟踪是由cookie和session共同支撑的。所以会话的持续时间与cookie存活时间和session存活时间都有关系。
- 默认情况下cookie在浏览器关闭就会消失,session30分钟以后会自动销毁。
- 所以会话的跟踪是由前端的cookie和服务器的session信息根据sessionID唯一确定的关系保证的,cookie和session任何一方被销毁了都会导致会话结束。
- 我们也可以通过修改cookie存活时间和session的存活时间,从而改变会话的持续时间。
cookie的共享作用范围
- 默认情况下只有同一个web项目下的所有页面以及servlet可以共享cookie。
- 如果一个tomcat服务器同时部署了多个web项目,那么这几个项目之间是不能共享cookie的。
- 但是可以手动设置cookie的作用范围
cookie与session的区别
- cookie保存在客户端,默认每次http请求会携带cookie发送给服务端。
- session是服务器端会话技术,用于一次会话多次请求时共享数据,session数据保存在服务器。
- cookie存储在客户端,session存储在服务器。
- cookie有大小限制,session没有。
- cookie相对来说不安全,session比较安全。
cookie-session机制原理
- session是如何保证同一个用户一次会话期间的多次请求共享数据并且不同用户的session数据不会共享。
- 其实session的实现是依赖于cookie的。前端第一次向后台发送请求的时候后台会新生成一个session对象,并且把唯一的sessionID写入到cookie中返回给前端。以后前端每次请求都会默认携带cookie信息传给后台。
- 也就是说servlet执行getSession()方法时会先判断前端的cookie信息中是否存在sessionID,如果存在就在服务器寻找对应session对象获取,如果不存在说明客户端是第一次请求,就新建session对象,并把该对象sessionID写入cookie中返回给前端。
- 比如张三向服务器发送一个请求,服务器在获取session对象的时候发现张三的请求头的cookie信息中没有sessionID数据,那么就会新建一个session并把sessionID(假如为0001)响应回去。下次张三再请求服务器时,服务器根据它携带的sessionID就可以获取0001对应的session对象知道是张三发来的请求。
- 如果李四携带自己的cookie信息sessionID=0002来请求服务器了,服务器解析sessionID获取到一个session信息就可以判断这个请求是李四发来的而不是张三。