Cookie原理
基于响应头Set-Cookie和请求头Cookie实现
第一次访问后台完成,服务器new Cookie后response.addCookie(cookie),通过Set-Cookie响应头将cookie带回浏览器,浏览器会保存。
第二次访问后台时,浏览器会通过Cookie请求头传入后台。
Cookie共享问题
一个tomcat下不同项目默认不能访问获得其他项目创建的cookie,但是可以在生产cookie的时候setPath("/")设置虚拟路径为根路径来共享。
不同tomcat间可以通过设置一级域名的方式共享
setDomain(".baidu=.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
Session原理:基于Cookie回写jsessionid,确保在同一次会话中使用的同一个session。
第一次访问服务器,服务器会创建session,并创建cookie用于存储jsessionid,回写到浏览器,浏览器不关闭再次访问,会将携带sessionid的cookie通过Cookie请求头发送给服务器,保证使用同一个session。
1.浏览器关闭,服务器开启,两次获取session是否同一个?
默认不是。因为cookie在浏览器关闭就消失了。
- 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie co = new Cookie(“JSESSIONID”,session.getId());
co.setMaxAge(60*60);
response.addCookie(co);
2.浏览器不关闭,服务器关闭,两次获取的session是否同一个?
不是。因为服务器关闭session对象被销毁了。
但是要保存数据,可以设置session的存活时间(默认30min,在tomcat的web.xml中配置)并且依赖钝化和活化。
注意:Idea不能测试活化,会把work目录删除再创建,读取不到序列化后的session。