zoukankan      html  css  js  c++  java
  • cookie,session以及application的比较

    cookie工作原理:

     cookie代码:

     1 @WebServlet(value = "/cookie",name = "CookieServlet")
     2 public class CookieServlet extends HttpServlet {
     3 
     4     @Override
     5     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     6         String username=req.getParameter("username");
     7         String password=req.getParameter("password");
     8         //String expire=req.getParameter("expire");//获取前端传入多久之内自动登录
     9 
    10         //创建cookie对象将我们的用户名以及密码设置到cookie中
    11         Cookie usernameCookie=new Cookie("username",username);
    12         //给cookie设置过期的时间,其单位是秒  10秒后下面的测试类就拿不到我们的用户名以及密码了
    13         usernameCookie.setMaxAge(10);
    14         
    15         Cookie passwordCookie=new Cookie("password",password);
    16         passwordCookie.setMaxAge(10);
    17 
    18         //cookie的响应
    19         resp.addCookie(usernameCookie);
    20         resp.addCookie(passwordCookie);
    21 
    22     }
    23 }

    浏览器里面的记录:

     测试类:

     1 @WebServlet(value = "/cookieTest",name = "CookieTestServlet")
     2 public class CookieTestServlet extends HttpServlet {
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5 
     6         //获取所有的cookie的信息
     7         Cookie[]cs=req.getCookies();
     8 
     9         if(cs!=null){
    10             for (Cookie c:cs){
    11                 System.out.println(c.getName()+"===="+c.getValue());
    12             }
    13         }
    14 
    15     }

    后台拿到的记录:

     Session(会话)对象出现的原因:是因为HTTP协议是一个无状态的协议。

      比如你登录淘宝  当你登录到自己的账号的时候无论你点击哪个标题页面  都会有你的淘宝用户名

    流程:

    代码:

     1 @WebServlet(value = "/session",name = "SessionServlet")
     2 public class SessionServlet extends HttpServlet {
     3 
     4     @Override
     5     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     6 
     7         User user=new User();
     8         user.setId(1);
     9         user.setName("张三");
    10 
    11         //通过请求去获取session
    12         HttpSession session=req.getSession();
    13         session.setAttribute("user",user);
    14 
    15     }
    16 }

    然后在每一个servlet里面都加上:

     然后在浏览器里面先运行:

     把控制台清除,然后访问不同的servlet都可以得到:

     还有在浏览器第一次访问session的时候没有 当再访问其他的servlet的时候就会出现sessionID:

    注意:如果浏览器关闭后,再打开浏览器访问我们的session那么我们的浏览器会重新弄个sessionID给你,不关浏览器就不会改变。

    application:

     说白了他在整个服务器就一个值

    先在context里面设置我们的用户姓名:

    1 @WebServlet(value = "/context",name = "ContextServlet")
    2 public class ContextServlet extends HttpServlet {
    3 
    4     @Override
    5     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    6         ServletContext servletContext=req.getServletContext();
    7         servletContext.setAttribute("name","王五");
    8     }
    9 }

    然后再其他的servlet里面获取我们的姓名:

     1 /**
     2  * 在往后的登录过程中, 登录成功后都会将用户的个人信息放置到session中。
     3  */
     4 @WebServlet(value = "/login",name = "LoginServlet")
     5 public class LoginServlet extends HttpServlet {
     6 
     7     @Override
     8     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     9 
    10         String username = req.getParameter("username");
    11         String password = req.getParameter("password");
    12 
    13         // select * from user where username = ? and password = ?
    14         User user = new User();
    15         user.setName(username);
    16         user.setId(34);
    17 
    18         req.getSession().setAttribute("user", user);
    19 
    20         // 获取全应用唯一的一个 ServletContext类型的对象,单例
    21         ServletContext servletContext = req.getServletContext();
    22         System.out.println(servletContext.getAttribute("name"));
    23 
    24     }
    25 }

    然后在浏览器里面先把context跑起来在运行其他的servlet在后台你会看见:

    直接访问我们的jsp页面也可以:

     总结:

      cookie 是客户端(浏览器)存储。
      session是服务器端存储的。
      application 是ServletContext类型的对象,全局就唯一一个。无论是通过何种API,拿到的都是同一个对象。
      

  • 相关阅读:
    alibaba/fescar 阿里巴巴 开源 分布式事务中间件
    InnoDB表优化
    解密日志文件工具类
    MYSQL 数据库结构优化
    MYSQL 索引优化
    MYSQL 表转 JavaBean 工具类
    MYSQL 优化
    mysql 数据库备份和恢复
    DMA-Direct Memory Access
    mysql 优化之 doublewrite buffer 机制
  • 原文地址:https://www.cnblogs.com/dabu/p/12694834.html
Copyright © 2011-2022 走看看