Cookie
Cookie是本地的存储数据,是键值对
注意一定要使用resp.addCookie才能返回cookie
cookie修改
修改的话也是调用addCookie,对相同key的进行修改,作用于set-cookie响应头。
可以新建cookie,add进去,也可以在用户传过来的cookie之上进行修改。
cookie的path的作用
cookie只有其内部的path与请求url相符合时才能发送
比如这里path1就只能发送到localhost/13_cookie_session_abc/**,其他的不行,可以设置path来达到效果。
cookie的生命周期
注意cookie的默认是无限时长的,这点和session不一样
在Max-age(就是失效时间)可以看到都是session级的,也就是无线时长,浏览器关闭才消失。cookie并不存在像session那样的计时器刷新机制(那是在服务器端对于session对象才会有的),cookie是只要时间到就会在本地删掉,想要延长时间或立刻让本地删掉可以通过服务端修改max-age实现。
Session
会话
在线数据存储,将信息存储在服务器上
httpsession是一个接口,需要我们手动实现
基本用法
getSession
获取session,根据req中发过来的cookie JSESSIONID来取session,如果没有JSESSIONID或JSESSIONID所对应的session已经被销毁了(总的来说就是没找到),那就新建一个session,并且在resp中设置好cookie,返回后本地就可以加上此cookie了。
判断是否为新,id
Session底层的具体实现细节
总的来说就是本地有cookie保证可以使用之前的session,服务器根据sessionid找(getSession)相应的session,找到关于该session的数据存储,没有就新建session,响应让本地获取sessionid(cookie是自动设定的,不需要自己手动放到resp中)。
本地的JSESSIONID的cookie就是指的是sessionid,他是session级的生命周期(也就是本地可以存无限时间,浏览器关闭cookie消失)
Session销毁
1.Session超时
session可以通过web.xml或者代码
的方式存取,超时是指在n秒后没有再次进行会话就销毁session对象,如果期间进行了新的访问,就会重置timeout时间,也就是只要每一段时间用session访问一次就可以做到永不断开(浏览器不关闭的情况下,当然也可以设置
值为-1来实现无超时时间
)。
注意这个超时时间是存在服务器端的,与本地的cookie消失时间不是一个东西
2.浏览器关闭
浏览器关闭意味着cookie消除,sessionid没了,就算时间没结束也找不到相应的session了。
相关方法
Session的可见性
Sessionid一般path为工程路径,也就是一般整个工程共用一个session,应该也可以手动设置多个session吧。