(4)JavaWeb Cookie与Session会话

  1. 加入购物车的需求
    若使用request域来存储放在购物车中的内容,则存在一个问题,request的生命周期只有一次请求,只能加入一个商品,不能加入多个商品。

  2. 使用servletContext域的问题
    servletContext域的生命周期比较长,服务器启动时创建,服务器关闭时销毁,容易导致各个浏览器之间的数据混淆,浪费服务器存储空间

  3. cookie会话
    1.请求时
    在servlet当中主动把商品保存到cookie当中,cookie时浏览器当中的一个缓存区域
    2.在结算请求时
    把浏览器缓存中存放的数据发送给服务器
    3.访问
    在第一次访问中,请求头当中没有cookie,但是相应当中会看到set-cookie,再一次访问时,请求头当中就能够看到cookie信息,访问服务器的任何资源,一般情况下都会把cookie带过去。

  4. cookie的使用

//1.创建cookie
Cookie cookie = new Cookie("lk","it666");
//2.响应给浏览器
response.addCookie(cookie);
cookie的存储时间
  1. 在默认情况下,cookie时会话级别的
    打开浏览器,关闭浏览器为一次会话。
    如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭时,cookie信息被销毁。

  2. 设置cookie的存储时间,过期会自动删除

cookie.setMaxAge(20);//时间为20秒

需要在响应给浏览器之前设置存储时间。

设置cookie的携带路径
  1. 访问某一个资源时,要不要带cookie信息,如果每一外资源都携带,会影响传输速度
  2. 如果不设置携带路径,默认情况下会在访问创建cookie的web资源相同的路径都会携带cookie信息
    http://localhost:8080/10-Cookie-Session/cookieServlet中的
    http://localhost:8080/10-Cookie-Session的目录下的servlet都会携带cookie信息。
  3. 设置携带路径
cookie.setPath(String path);

String path有三种写法:

cookie.setPath("/CookiePro/cookieServlet");
//只有访问cookieServlet才携带cookie信息
cookie.setPath("/CookiePro");
//访问指定工程时,才携带cookie信息
cookie.setPath("/");
//访问服务器下部署的所有工程时都会携带cookie,使用较少
  1. 删除cookie信息,将该cookie的生命周期设置为0即可。
  2. 获取cookie(掌握)
    通过Request对象的getCookies()方法
//获取所有的cookies
  Cookie[] cookies = request.getCookies();
  //判断cookies是否为空
  if(cookies != null) {
   //取出每一个cookie
   for (Cookie cookie : cookies) {
    //判断名字是否是自己的
    String name = cookie.getName();
    if(name.equals("lk")) {
     response.getWriter().write(" lk = value "+cookie.getValue());
    }
   }
  }
发布了21 篇原创文章 · 获赞 7 · 访问量 364

猜你喜欢

转载自blog.csdn.net/qq_45260619/article/details/104006755
今日推荐