JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session

第九节 Cookie与Session

目录

    • 第九节 Cookie与Session
      • 9.1 会话
      • 9.2 Cookie
      • 9.3 Session

9.1 会话

会话:用户打开一个浏览器,点了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话:一个客户端访问过服务端,下次再访问时,服务端会知道这个客户端访问过

一个网站,怎么证明客户访问过?(客户端->服务端)

  1. 服务端给客户端一个信件,客户端下次访问服务端带上这个“信件”即可->cookie
  2. 服务器登记了客户端来过,下一次客户端再访问时进行匹配->session

保存会话的两种技术

cookie:一种客户端技术(请求和响应)

session:一种服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息和数据放在session中

常见实例:访问过一个网站,下一次不用再登录就可以直接访问

9.2 Cookie

  • 从请求中拿到cookie //Cookie[] cookies = req.getCookies();
  • 服务器响应给客户端cookie //resp.addCookie(new Cookie(“lastLoginTime”,System.currentTimeMillis()+""));

典例:保存用户的上一次访问时间

//保存用户上一次访问的时间
public class cookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器告诉你来的时间,把那个时间封装成一个信件,你下一次带着信件来,服务器就知道你来了
        req.setCharacterEncoding("utf-16");
        resp.setCharacterEncoding("utf-16");
        PrintWriter writer = resp.getWriter();
        //Cookie是服务器从客户端获取的
        Cookie[] cookies = req.getCookies();    //返回一个数组,说明cookie存在多个
        //先判断Cookie是否存在
        if(cookies!=null){
            //如果存在
            writer.write("你上一次访问的时间为:");
            for(int i=0;i<cookies.length;i++){
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if(cookie.getName().equals("lastLoginTime")){
                    //获取cookie中的值
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    writer.write(date.toLocaleString());
                }

            }
        }else {
            writer.write("这是你第一次访问本站");
        }
        //服务器给客户端响应一个cookie
        resp.addCookie(new Cookie("lastLoginTime",System.currentTimeMillis()+""));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

启动测试

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session_第1张图片


JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session_第2张图片

如果关闭浏览器,则上一次访问的时间将会改变,不再保存,但是可以通过设置有效期使上一次访问的时间在有效期内保存,即浏览器关闭cookie仍然存在

//cookie有效期为一天
cookie.setMaxAge(24*60*60);

cookie一般会保存在本地的用户目录下appdata

关于Cookie的删除:

  • 不设置有效期,关闭浏览器自动删除
  • 设置有效期为0

注意:在通信时如果存在中文,最好使用这种方式:编码URLencoding.encode(“你好世界”,“utf-8”),解码URLDecoder.decode(“你好世界”,"utf-8’’)

9.3 Session

Session简介:服务器会为每一个用户(浏览器)创建一个Session对象,一个Session独占一个浏览器,即只要浏览器没有关闭,这个Session就存在

用户登录之后,整个网站都可以访问–>保存用户信息(保存购物车等)

典例:通过session获取一个类的信息

访问/session存储信息

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-16");
        resp.setCharacterEncoding("utf-16");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();

        //给session存储数据
        session.setAttribute("name",new person("srq",520));
        //获取session的id
        String id = session.getId();

        //判断是否是新的session
        if(session.isNew()){
            resp.getWriter().write("新的session已创建,新的session的id为:"+id);
        }else {
            resp.getWriter().write("session已经存在,新的session的id为:"+id);
        }
        //Session创建的时候做了什么事情
//        Cookie cookie = new Cookie("JSESSIONID",id);
//        resp.addCookie(cookie);
    }

访问/s2打印信息

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-16");
        resp.setCharacterEncoding("utf-16");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();
        //获取Session数据
        person name = (person) session.getAttribute("name");
        System.out.println(name.toString());
    }

启动测试

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session_第3张图片

Session的注销

在java文件中注销

session.invalidate();

在配置文件中注销


  <session-config>
    //15min后session自动失效
    <session-timeout>15session-timeout>
  session-config>

Session与Cookie的区别

Cookie:把用户的数据写给用户的浏览器(保存多个信息)

Session:把用户的数据写在用户独占的Session中(保存重要的信息),由服务器创建

使用场景:保存用户登录信息,保存购物车信息

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session_第4张图片
如果文章对您有所帮助,记得一键三连支持一下哦~

你可能感兴趣的:(学习笔记,javaweb,服务器,前端,java,tomcat,http)