Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。
Session的实现是基于Cookie,Session需要借助于Cookie存储客 户的唯一性标识JSESSIONID
1.Session对象
HttpSession session = request.getSession();
果服务器端没有该会话的Session 对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回
向session中存取数据(session也是一个域对象)
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
Session对象的生命周期
创建:第一次执行request.getSession()时创建
销毁:
1)服务器(非正常)关闭时
2)session过期/失效(默认30分钟)
时间的起算点 从何时开始计算30分钟?
从不操作服务器端的资源开始计时
可以在工程的web.xml中进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
1)手动销毁session
session.invalidate();
作用范围:
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象
获取JESSESIONID
//获得session对象 HttpSession session=request.getSession(); //获取JESSESIONID String id=session.getId(); //持久化JSESSIONID Cookie cookie =new Cookie("JSESSIONID", id); //cookie.setPath("/WEB04"); cookie.setMaxAge(3*60); response.addCookie(cookie); response.getWriter().write("JSESSIONID: "+id);
判断客户端第几次访问及上次访问时间
//记录当前系统时间发送给客户端 Date date=new Date(); //创建日期格式转换类 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time=sdf.format(date); //创建cookie对象 Cookie cookie=new Cookie("lastAccessTime",time); //设置持久化时间 cookie.setMaxAge(3*60); //发送cookie response.addCookie(cookie); //获取客户端携带的Cookie信息-lastAccessTime String lastAccessTime=null; Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ if(c.getName().equals("lastAccessTime")){ lastAccessTime=c.getValue(); } } } //对lastAccessTime进行判定 //解决响应乱码 response.setContentType("text/html;charset=utf-8"); if(lastAccessTime==null){ response.getWriter().write("你是第一次访问"); } else{ response.getWriter().write("你上次访问的时间为:"+lastAccessTime); } }