Cookie(浏览器端会话技术)
Cookie cookie = new Cookie("lastLoginTime", String.valueOf(new Date().getTime()));
cookie.setMaxAge(6*60*60);
cookie.setPath(getServletContext().getContextPath()+"/");
response.addCookie(cookie);
1:cookie使用场景 记住用户名 上次登录时间
2:cookie工作原理
用户请求服务器,服务器创建key-value形式的cookie 通过response.addCookie(cookie)写回浏览器
3:cookie 的生命周期
服务器创建cookie并通过response响应头set-Cookie写回浏览器 默认cookie存活时间为浏览器关闭前,一旦浏览器关闭该cookie就从浏览器丢失,下次打开浏览器不会携带该cookie,通过设置cookie最大存活时间 ,在该时间范围内,无论浏览器是否关闭都不会丢失该cookie
4:cookie携带规则:默认服务器创建的cookie的path为项目路径+"/" 也可自己设置 只要浏览器请求路径中包含该path就携带
5:jsessionid是一种特殊的cookie 由服务器自动创建并写回浏览器 下次访问服务器携带该jsessionid去服务器中的session池中 查找有无该jsessionid对应的session
Session(服务端会话技术)
1 :session使用场景 保持用户登录状态 保存用户私有的数据 一个浏览器一个session
2:session工作原理:底层依赖于cookie jsessinid是一种特殊的cookie
浏览器访问服务器
1:如果cookie带有该访问路径的sessionId 则服务器获取到该sessionId 去服务器内存的session池中查找和此 sessionId相符合的session
a 如果比对成功 直接使用该session
b 如果比对不成功 ,就说明服务器session超时被干掉了 ,那么服务器就需要重新创建一个session sessionId还 是浏览器带来的那个 sessionId
2如果cookie没有sessionId ,则服务器创建一个session ,同时创建一个sesionId以cookie返回浏览器
3:session生命周期
1:在java代码中默认是第一次getSession的时候创建,如果访问的是jsp页面就直接创建session 将sessionId以 cookie形式返回浏览器
2:在服务器存活时间默认30分钟 在tomcat的conf下的web.xml中设置
通过java代码设置 request.getSession().setMaxInactiveInterval(60);秒为单位
通过java代码干掉session 退出就使用这个 request.getSession().invalidate() 浏览器携带jsssionid过来比对不到,服务器就新建session id为携带过来的jsessionid
注意:jsessionid虽然也是cookie 是cookie那么默认浏览器关闭就要消失 下次就不会携带了 所以以cookie形式设置jsessionid存 活时间
//继续判断是否记住用户名
if("ok".equals(saveName)){
//放入cookie
Cookie cookie = new Cookie("saveName",user.getName());
Cookie cookie1 = new Cookie("JSESSIONID",request.getSession().getId());
cookie1.setMaxAge(3600);
cookie.setMaxAge(3600);
response.addCookie(cookie);
response.addCookie(cookie1);
// cookie.setPath(request.getContextPath()+"/");
}