Cookie & Session
会话技术
会话:第一次请求发送过来,开始会话
多次请求之后
关闭客户端/浏览器 结束会话
HTTP协议无状态,客户端本身没有有效信息给服务器
Cookie
Cookie:
------------存在于客户端
------------1.服务器接收到请求
------------2.服务器通过response将内容存储到客户端
1.服务器接收参数
2.创建Cookie map
3.把Cookies带到客户端
Cookie默认是会话结束就清除的
但是可以设置Cookie的持久化,持久化时间
//Servlet3Demo
// 2.创建Cookie map 不支持中文
Cookie cookie = new Cookie("name", "bao");
// 设置cookie的持久化时间 单位秒
cookie.setMaxAge(Integer.MAX_VALUE);
// 携带路径:访问哪些资源会把cookie携带到服务器
// 默认携带路径 - 当前目录
// /web04/hello/Servlet3Demo
//cookie.setPath("/"); // 当前服务器所有应用
//cookie.setPath("/web04"); // 当前应用
// 结论:只有name和path一致的时候,才算同一个cookie
// 3.把Cookie带到客户端
response.addCookie(cookie);
//Servlet4Demo
// 获得文件对应的mimetype类型
request.getServletContext().getMimeType("jpg");
// 1.获得客户端通过request携带过来的Cookie
// 获得客户端带过来的所有的cookie,可能为null
Cookie[] cookies = request.getCookies();
if (cookies!=null) {
for (Cookie c : cookies) {
System.out.println(c.getName() +" = "+ c.getValue());
}
}
Session
Session:存在于服务器,存数据 取数据
-----------域对象:
-----------范围:一次会话
1.获得session对象
获得对象:request.getSession(); ->都是域对象,范围小的域对象可以获得范围大的域对象
如果第一次调用,服务器会给客户端先创建一个session,并返回
如果再次调用,直接返回原先创建好的session --通过JSESSIONID
Cookie会保存JSESSION,之后通过JSESSION识别session
Session依赖于Cookie
2.存数据
设置cookie持久化(JseesionID持久化),获得jessionid,session.getId()
3.JSESSIONID持久化
JSESSION
//1.获得session对象
HttpSession session = request.getSession();
//2.存数据
session.setAttribute("age", 19);
String jessionid = session.getId();
//3.JSESSION持久化
Cookie cookie = new Cookie("JSESSIONID",jessionid);
cookie.setPath(request.getContextPath());
cookie.setMaxAge(Integer.MAX_VALUE);
response.addCookie(cookie);
4.取得数据
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Object age = session.getAttribute("age");
response.getWriter().write("age:"+age.toString()+"\n"+session.getId());
}
Session生命周期
Session什么时候创建:
第一次调用request.getSession()
什么时候销毁:
注意:不是会话结束session就销毁的
服务器关闭(非正常关闭)
手动销毁 session.invalidate()
超时,默认30分钟 - 总最后一次没有对网站进行请求操作开始计时
在应用内部的web.xml文件中修改
< session-config>
< session-timeout>1最低1分钟
< /session-config>
小结:
ServletContext:服务器全程
session:一次会话 - 登陆后的用户信息,临时购物车,
request:一次请求 - 转发
cookie:存客户端、JESSIONID、用户名、密码