会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话一个网站,怎么证明你来过?
客户端 服务端
1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了; cookie 在请求request中
2.服务器登记你来过了,下次你来的时候我来匹配你; seesion
cookie
session
1、从请求中拿到cookie信息
2、服务器响应给客户端cookie
3、cookie一般会保存在本地的用户目录下appdata;
细节:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //服务器告诉你 把这个信息封装成一个信件 //解决中文乱码 resp.setContentType("text/html"); req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); //网页输出 PrintWriter out = resp.getWriter(); Cookie[] cookies = req.getCookies(); if(cookies != null){ //如果存在 out.println("您上一次的信息:"); for( Cookie cookie : cookies){ //获取cookie的名字 if(cookie.getName().equals("lastLoginTime")){ long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); out.write(date.toLocaleString()); } } }else { out.println("这是您第一次访问本站"); } //新建一个cookie Cookie cookie = new Cookie("lastLoginTime" , System.currentTimeMillis()+""); cookie.setMaxAge(24*60*60); //设置cookie有效期 resp.addCookie(cookie); //响应给客户端一个cookie }
如何删除Cookie
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建一个cookie,名字必须要和要删除的名字一致 Cookie cookie = new Cookie("lastLoginTime" , System.currentTimeMillis()+""); //将cookie有效期设置为0 cookie.setMaxAge(0); resp.addCookie(cookie); }
中文乱码处理
编码解码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); Cookie[] cookies = req.getCookies(); if(cookies !=null){ for(Cookie cookie: cookies){ if(cookie.getName() == "name") { out.println(cookie.getValue()); out.println(URLDecoder.decode(cookie.getValue(),"utf-8")); } } } Cookie cookie = new Cookie("name" , URLEncoder.encode("严宇峰","utf-8")); }
什么是session:
Session和Cookie的区别
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费). Session对象由服务创建;
使用场景
设置session,并且存入数据 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); //2、得到Session HttpSession session = req.getSession(); //3、给Session中存信息 session.setAttribute("name","yyf");
/**或者也可以存入对象:
例子:session.setAttribute("people",new Preson("yyf",24,"男");
*/ //获取Session ID String id = session.getId(); if(session.isNew()){ resp.getWriter().write("Session已经创建成功,ID为:"+id); } else { resp.getWriter().write("Session已经存在了,ID为:"+id); } //Session创建的时候坐了什么事情 //Cookie cookie = new Cookie("JSESSIONID",id); //resp.addCookie(cookie); }
获得session数据 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); //2、得到Session HttpSession session = req.getSession(); //3、获得Session中存信息 String name = (String) session.getAttribute("name");
/**
Person person = (Person) session.getAttribute("people")
*/ //获取Session ID resp.getWriter().write(name); }
//注销Session HttpSession session = req.getSession(); session.removeAttribute("name"); session.invalidate(); //无效之后会重新生成一个session
会话自动过期
Cookie:
Session:
原文:https://www.cnblogs.com/yyyyff/p/14751303.html