javaweb会话技术-----cookie技术

request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

方法:

  • void setAttribute(String name,Object obj):存储数据

  • Object getAttitude(String name):通过键获取值

  • void removeAttribute(String name):通过键移除键值对

客户端会话技术

就是将共享数据保存到浏览器

Cookie的常用方法

创建Cookie new Cookie(key,value)

发送Cookie response.addCookie(Cookie)

获取Cookie request.getCookies()

 

Cookie的其他事项

  1. 可以有多个Cookie吗?

    • 可以有多个

  2. Cookie可以持久化吗?

    • Cookie默认的有效时间是一次会话

    • 可以使用setMaxAge()去设置Cookie的有效时间

      • 当参数为负数时就是默认存活时间(一次会话)

      • 当参数为0时表示删除该Cookie

      • 当参数为正整数时就代表存活的秒数

  3. 有乱码吗?

    • 在Tomcat8及以上的版本中可以携带中文的cookie,但是不能有特殊字符

    • URL编码及解码的机制

      • value = URLEncoder.encode(value, "utf-8");// 编码
      • value = URLDecoder.decode(value, "utf-8");// 解码

Cookie的特点

  1. 将数据存储到浏览器,由浏览器对Cookie进行维护

  2. Cookie的大小和个数受限,不同浏览器有所区别,Cookie保存的数据不能超过4095个字节,50个/每个域名

  3. Cookie安全性不够高,所有的Cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

package com.gton.servlet.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @program: javaweb-tomcat
 * @description:
 * @author: GuoTong
 * @create: 2020-09-15 10:01
 **/
@WebServlet(urlPatterns = {"/cookie"}, loadOnStartup = 1)
public class CookieServlet extends HttpServlet {

    /*会话技术Cookie技术:基于浏览器存储共享数据*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

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

resp.setContentType(
"text/html;charset=utf-8"); resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8");
  String username ="汤姆";
        URLEncoder.encode(username,"UTF-8");//编码
        URLDecoder.decode(username,"UTF-8");//解码,在获取cookie的时候
        Cookie cookie = new Cookie("username", username);

 


        Cookie cookie = new Cookie("username", "tom");

        /*
        * Connection: keep-alive
            Content-Length: 0
            Content-Type: text/html;charset=UTF-8
            Date: Tue, 15 Sep 2020 02:14:36 GMT
            Keep-Alive: timeout=20
            *
            *
            * 会在响应头里面设置cookie相应的内容
            Set-Cookie: username=tom
            *
            *
            *
            * 下一次的其他请求会在请求头里面:
            *
            *携带cookie传递过去。。。
            * Cookie: JSESSIONID=1479F7B045B3E185BAFDAB2A67DC2D39; username=tom
            *
            *
            *
            * 达到数据在会话中数据共享。。。。。。
        * */


        //cookie持久化
        /*
 * - Cookie默认的有效时间是一次会话
   - 可以使用`setMaxAge()`去设置Cookie的有效时间
   - 当参数为负数时就是默认存活时间(一次会话)
   - 当参数为0时表示删除该Cookie
   - 当参数为正整数时就代表存活的秒数
   * */
        resp.addCookie(cookie);
    }
}

创建cookie时:

 

 

其他的请求:

 

 

 所以达到数据共享。。。。。。。

删除cookie:cookie.setMaxAge(0);

 

            //基于服务器的删除cookie
            cookie.setMaxAge(0);
            //如果添加的cookie的key重复,那么会覆盖之前的
            resp.addCookie(cookie);

 

获取cookie:req.getCookies();

 

 

package com.gton.servlet.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @program: javaweb-tomcat
 * @description:
 * @author: GuoTong
 * @create: 2020-09-15 10:01
 **/
@WebServlet(urlPatterns = {"/cookieGet"}, loadOnStartup = 1)
public class CookieServletGet extends HttpServlet {

    /*会话技术Cookie技术:基于浏览器存储共享数据*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

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

        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + ":" + cookie.getValue());
        }
    }
}

 

posted on 2020-09-15 10:37  白嫖老郭  阅读(85)  评论(0)    收藏  举报

导航