JAVA基础之会话技术-Cookie及Session
2019-08-16 09:53:37来源:博客园 阅读 ()
JAVA基础之会话技术-Cookie及Session
至此,学习Servlet三个域对象:ServletContext(web项目)、request(一次请求)、Session(一个客户端)!均有相同的方法!
从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束。在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值。数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁!
一、会话技术简介:
1、存储客户端的状态:
因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。
会话技术是帮助服务器记住客户端状态(区分客户端)
2、会话技术:
①、从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。
②、会话技术分为Cookie 和Session:
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie.
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。
二、Cookie技术:
1、服务器向客户端发送一个Cookie(不能存中文)
Cookie cookie=new Cookie(String name,String value)
2、设置cookie在客户端的持久化时间:
cookie.setMaxAge(int seconds)
如果不设置持久化时间,cookie会存储到浏览器的内存中,浏览器关闭时cookie信息销毁。设置了的话,会在规定的时间内存在。
3、设置cookie的携带路径:
cookie.setPath(String path)
如果不设置携带路径,cookie信息在访问 产生 该cookie的web资源所在的路径 都携带cookie信息。
4、向客户端发送cookie
response.addCookie(Cookie cookie)
5、删除客户端的cookie
使用同名同路径的持久化时间为0的cookie进行覆盖
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建Cookie对象 Cookie cookie= new Cookie("godds","naiping"); //设置持久化时间(从请求Servlet开始) cookie.setMaxAge(60*2); //设置cookie携带路径(只有访问此路径才携带) //cookie.setPath("/WEB07/SendCookieServlet"); /*cookie.setPath("/WEB07"); cookie.setPath("/");*/ //发送 response.addCookie(cookie); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //删除Cookie Cookie cookie = new Cookie("goods","naiping"); cookie.setMaxAge(0); response.addCookie(cookie); }
6、服务器接收客户端携带cookie的方式:
以请求头的方式发送到服务器端的
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取cookie数组 Cookie[] cookies = request.getCookies(); //遍历cookie数组通过cookie名获取cookie值 for(Cookie c:cookies){ if(c.getName().equals("goods")){ System.out.println(c.getValue()); } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取当前的时间对象 Date date = new Date(); //创建日期转换类对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); //将日期对象转为字符串 String time = sdf.format(date); //创建cookie对象,记录当前访问时间 Cookie cookie = new Cookie("lastTime",time); cookie.setMaxAge(60*10); //发送cookie response.addCookie(cookie); //接收cookie Cookie[] cookies = request.getCookies(); //定义变量存储上次访问时间 String lastTime = null; //遍历 for(Cookie c:cookies){ if(c.getName().equals("lastTime")){ lastTime=c.getValue(); } } //解决响应乱码 response.setContentType("text/html;charset=utf-8"); if(lastTime==null){ //第一次访问 response.getWriter().write("您是第一次访问"); }else{ response.getWriter().write("您上次访问时间为"+lastTime); } }
三、Session技术:(一个域对象)
1、简介:
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。
2、获得Session对象:
HttpSession session = request.getSession()
此方法会获得专属于当前会话(当前客户端)的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session了)
3、域对象的存取数据;
4、生命周期:
①、创建:
第一次执行 request.getSession() 时创建
②、销毁:
服务器非正常关闭时;
Session 过期、失效(默认30分钟)
手动销毁Session
③、作用范围:
默认在一次会话中,也就是说,在一次会话中任何资源公用一个session对象。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取Session域中的内容 HttpSession session = request.getSession(); //获取Session中的内容 String goods = (String)session.getAttribute("goods"); //解决乱码 response.setContentType("text/html;charset=utf-8"); response.getWriter().write(goods); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取Session对象 HttpSession session = request.getSession(); //向Session域中存储数据(cookie不能存汉字) session.setAttribute("goods", "奶瓶"); //获取JESSIONID String id = session.getId(); //设置持久化时间---创建一个新的cookie设置其时间并覆盖原来的 //创建Cookie Cookie cookie = new Cookie("JSESSIONID",id); cookie.setPath("/WEB08"); cookie.setMaxAge(60*3); //发送cookie response.addCookie(cookie); response.getWriter().write("JSESSIONID:"+id); //结果 JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230 }
原文链接:https://www.cnblogs.com/21-forever/p/11143712.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Shiro权限框架
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash