Java 会话技术 之 session

Session技术(存放在服务器  基于cookie(存储sessionId)

 

每个客户端 第一次会话请求时  创建独自的session+JSESSIONID

服务端 响应 set-cookie:JSESSIONID:xxxxx  存入客户端 

客户端 请求时 携带cookie:JSESSIONID:xxxxx去找对应的session域(内存)

客户端关闭 清除内存cookie / 保留硬盘cookie

客户端开启 再次访问  JSESSIONID没有  session域还在

 

Session对象的生命周期

创建:第一次执行request.getSession()时创建

销毁:

1)服务器(非正常)关闭时

2session过期/销毁(不再请求,30分钟(tomcat默认)后销毁)

可以在WEB项目下WEB-INF/web.xml中进行配置

<session-config>

<session-timeout>30</session-timeout>

</session-config>

3)手动销毁session    退出时,删除session内数据 不用销毁

session.invalidate();

 

作用范围:

默认在一次会话中,一次会话中任何资源公用一个session对象

 

public class Servlet01 extends HttpServlet {

public void doGet(...) throws ServletException, IOException {

//获取每个客户端私有的session域(内存) 不存在 创建

HttpSession session=request.getSession();//获取/创建session

 

session.setAttribute("goods", "iphone"); //存储数据

//String goods=(String)session.setAttribute("goods"); //取数据

//session.removeAttribute("goods"); //删除数据

 

String id=session.getId(); //获取JsessionId

response.getWriter().write("JsessionId:"+id); //网页输出id

}

public void doPost(...) {doGet(request, response);}

}

 

public class Servlet02 extends HttpServlet {//一次会话 任何资源共用session

public void doGet(...) throws ServletException, IOException {

HttpSession session=request.getSession();//获取session对象

String value=(String)session.getAttribute("name");//("goods")

response.setContentType("text/html;charset=utf-8");//解决乱码

response.getWriter().write("name:"+value);

}

public void doPost(...) {doGet(request, response);}

}

 

public class MyServlet extends HttpServlet {//session持久化

public void doGet(...) throws ServletException, IOException {

//获取session对象

HttpSession session=request.getSession();

session.setAttribute("name", "小野猪");

 

String id=session.getId();//获取JsessionId

//创建一个存储JsessionIdcookie对象

Cookie cookie=new Cookie("JSESSIONID",id);

cookie.setPath("/WEB0005");

cookie.setMaxAge(60*3);//JSESSIONID 存储时间

//发送cookie对象

response.addCookie(cookie);

response.getWriter().write("JSESSION:"+id);

}

public void doPost(...){doGet(request, response);}

}

 

 

posted @ 2019-01-18 09:29  博客张C  阅读(826)  评论(0编辑  收藏  举报