zoukankan      html  css  js  c++  java
  • 2020Cookie学习笔记

    package com.demo.test;


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

    public class CookieServlet extends HttpServlet {
    //cookie不支持使用中文,要使用必须先做base64编码

    //创建cookie方法
    protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 解决响应中乱码问题
    resp.setContentType("text/html;charset=UTF-8");
    // 创建一个新的cookie
    // 1、创建Cookie对象,服务器保存了Cookie信息
    Cookie cookie = new Cookie("key1", "value1");
    // 通知客户端保存Cookie resp.addCookie(cookie);不能省
    resp.addCookie(cookie);
    // 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

    Cookie cookie01 = new Cookie("key2", "value2");
    // 通知客户端保存Cookie resp.addCookie(cookie);不能省
    resp.addCookie(cookie01);
    // 浏览器收到响应后,发现有set-cookie响应头,查找是否自身含有这个cookie信息,如果没有就储存一下,有就修改。

    resp.getWriter().write("Cookie创建成功!");
    }

    // 获取cookie方法
    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 通过getCookies方法获取,反复一个cookie数组;
    Cookie[] cookies = req.getCookies();

    //
    Cookie iWantCookie = new CookieUtils().findCookie("key1", cookies);

    /* 如果cookie不等于null,就是找到了需要的cookie */
    if (null != iWantCookie) {
    resp.getWriter().write(iWantCookie.getName() + "=" + iWantCookie.getValue());
    }
    }

    protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) {
    // 改变一个cookie的值
    /*
    * 方法一、1
    * 1、先创建一个要修改的同名的cookie对像
    * 2、在构造器,同时赋予新的Cookie值
    * 3、调用response.addCookie(cookie);
    * */
    /*Cookie cookie = new Cookie("key1", "key1Value");
    resp.addCookie(cookie);
    CookieServlet cookieServlet = new CookieServlet();
    try {
    cookieServlet.getCookie(req, resp);
    } catch (ServletException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }*/
    // 方法二:
    /**
    * 1、先查找到需要修改的Cookie对象
    * 2、调用setValue()方法赋予新的Cookie值
    * 3、调用response.addCookie()通知客户端保存修改
    */
    Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
    if (cookie != null) {
    cookie.setValue("key2Value2");
    resp.addCookie(cookie);
    }
    }

    /**
    * cookie的生存控制指的是如何管理Cookie什么时候被销毁(删除)
    * setMaxAge() 正值表示cookie将会在该值所表示的秒数(整数)之后过期,注意该值时cookie的最大生存时间,不是cookie当前的生存时间
    * 负值意味着,cookie不会持久储存,将在web浏览器退出时删除,0值会导致删除Cookie(立即)
    */
    protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) {
    Cookie cookie = new Cookie("default", "defaultValue");
    cookie.setMaxAge(-1);//设置存活时间
    resp.addCookie(cookie);
    }

    protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) {
    // 先找到要删除的cookie对象
    // 设置cookie的setMaxAge为零,立即删除cookie,调用setMaxAge(0);
    // 调用response.addCookie(cookie)
    resp.setContentType("text/html;charset=UTF-8");
    Cookie[] cookies = req.getCookies();
    Cookie cookie = CookieUtils.findCookie("key2", cookies);
    if (cookie != null) {
    cookie.setMaxAge(0);
    resp.addCookie(cookie);
    try {
    resp.getWriter().write("key2已删除");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    protected void life3600(HttpServletRequest req, HttpServletResponse resp) {
    // 设置cookie存活一个小时
    Cookie cookie = new Cookie("life3600", "value3600");
    cookie.setMaxAge(60 * 60);//设置时间为60*60秒
    resp.addCookie(cookie);
    }

    /*
    *Cookie有效路径path的设置
    * Cookie的path属性可以有效过滤哪些Cookie可以发送给服务器,哪些不发
    * path属性是通过请求的地址来进行有效的过滤。
    *
    * CookieA path=/工程路径
    * CookieB path=/工程路径/abc
    *
    * 请求地址如下:
    * http://ip:port/工程路径/a.html
    * CookieA 发送
    * CookieB 不发送
    *
    * http://ip:port/工程路径/abc/a.html
    * CookieA 发送
    * CookieB 发送
    */
    protected void testPath(HttpServletRequest req, HttpServletResponse resp) {
    resp.setContentType("text/html;charset=UTF-8");
    Cookie cookie = new Cookie("testPath", "pathValue");
    cookie.setPath( req.getContextPath()+"/abc"); //=====>>>> /工程路径/abc,该cookie必须在有abc路径是才会创建
    resp.addCookie(cookie);
    try {
    resp.getWriter().write("创建了一个带有path路径的Cookie");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    }
    这里还是用了一个cookie查找类
    package com.demo.test;

    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;

    public class CookieUtils {
    /**
    *查找指定名称的Cookie对象
    * @param name 指定cookie的name
    * @param cookies 传入客户端cookie数组
    * @return 返回查找到的cookie
    */
    public static Cookie findCookie(String name,Cookie[] cookies){
    if (name==null||cookies==null||cookies.length==0){
    return null;
    }
    for (Cookie cookie : cookies) {
    if (name.equals(cookie.getName())){
    return cookie;
    }
    }
    return null;
    }
    }


  • 相关阅读:
    New version of VS2005 extensions for SharePoint 3.0
    QuickPart : 用户控件包装器 for SharePoint Server 2007
    随想
    发布 SharePoint Server 2007 Starter Page
    如何在SharePoint Server中整合其他应用系统?
    Office SharePoint Server 2007 中文180天评估版到货!
    RMS 1.0 SP2
    SharePoint Server 2007 Web内容管理中的几个关键概念
    如何为已存在的SharePoint站点启用SSL
    Some update information about Office 2007
  • 原文地址:https://www.cnblogs.com/youlingdada-top/p/13671001.html
Copyright © 2011-2022 走看看