servlet cookie和session
Cookie
服务端设置Cookie后,浏览器会在下次的请求中自动带上Cookie
同一个项目中设置Cookie后,该项目下的其他请求可以共享Cookie(默认)
若想要在同一个Tomcat容器中实现不同项目之间Cookie共享,需要将Cookie的作用域设置为容器的根路径,如下:
cookie.setPath("/");
若想要实现在不同的tomcat容器中实现Cookie共享,需要通过设置一级域名来实现贡献,如news.baidu.com 和 music.baidu.com
cookie.setDomain(".baidu.com");
Cookie的作用时长设置:
setMaxAge(int seconds)
1.正数:将Cookie数据写到硬盘文件中,并指定Cookie的存活时间,时间到后,Cookie文件自动失效(关闭浏览器后指定存活时间内仍然有效)
2.负数:默认值,关闭浏览器后Cookie失效
3.零:立即删除Cookie信息
Cookie存在浏览器客户端
Session 存在服务端
HttpSession session = request.getSession(); //设置属性 session.setAttribute("name","tom"); //读取属性 session.getAttribute("name"); //移除属性 session.removeAttribute("name"); //设置有效期,单位为秒,-1代表永不过期 session.setMaxInactiveInterval(1000); //使其失效 session.invalidate();
客户端关闭,服务起不关闭,两次获取的session不一致
可以通过将获取的sessionID封装到Cookie里面做一个持久化,这样浏览器关闭后在打开获取到的session仍然一致
客户端不关闭,服务器关闭,两次获取的session的不一致
这种场景Tomcat服务起已经对session做了钝化和活化
钝化:在服务起正常关闭之前,将session持久化到硬盘上
活化:在服务起重启之后,将持久化得session文件转换为内存中得session对象(反序列化)
session被销毁得形式
1、失效时间到了后(默认30分钟),可以通过在tomcat得配置文件web.xml中设置默认失效时间
2、服务起被关闭时,session也会被销毁
3、调用函数去销毁session
session.invalidate();
Session 特点:
session用于存储一次会话得多次请求得数据,存在服务器
session可以存储任意类型,任意大小得数据
Session与Cookie得区别
1、session存与服务起端,Cookie存在客户端
2、session没有数据大小限制,Cookie有
3、session数据安全,Cookie相对不安全