zoukankan      html  css  js  c++  java
  • 初识cookie

    package day01.cookies;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * cookie中需要注意的点:
     * 		1) 在cookie中添加中文的value的时候,需要使用
     * 			URLEncoder和URLDecoder进行编码和解码
     * 			URLEncoder.encode()
     * 			URLDecoder.decode()
     * 		2) cookie中有一个设置生存空间的setPath()方法
     * 			作用是cookie在这个设置的路径中,才会被携带
     * 			cookie.setPath(String path)
     * 		3) cookie的生存时间,setMaxAge(int time)
     * 			其中的time:
     * 			
     * 			正整数:在XX秒之后失效
     * 			
     * 			(默认)负整数:在浏览器关闭的时候失效:负数的值没有关系 -1和-10000效果相同
     * 			
     * 			0:
     * 			一般用于删除同名的cookie,比如现在浏览器中有一个stu_name的cookie
     * 			我再创建一个stu_name的cookie,提交覆盖之后,设置它的生存时间为0
     * 			当前就结束。
     * 			Cookie c = new Cookie("stu_name", "xxx");
     * 			c.setMaxAge(0);
     * 	
     * @author mzy
     * 
     * cookie的限制:
     * 		一个浏览器最多放300个cookie,一个站点最多有20个cookie
     * 		每个cookie的大小限制为4kb。
     *		
     *cookie的类型单一(数据类型不丰富)
     *并且在浏览器中可以查看,相对不安全;
     *但是cookie足够简单,并且数据是存在浏览器的,
     *不会占用服务器的资源;减轻服务器的负担;
     *
     *
     *session的引入:
     *		大小没有了限制,且类型更丰富,并且更安全;
     *session就是用来弥补cookie的。
     *
     */
    public class CookieDemo01 extends HttpServlet {
    
    	private static final long serialVersionUID = 1271099427163484729L;
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    
    		// 1. 使用响应头:(设置cookie中的数据)
    		response.setHeader("set-cookie", "name=mzy");
    		// 名字相同的cookie属性会覆盖
    		// response.setHeader("set-cookie", "name=zxr");
    		/*
    		 * 每次为服务器的response存入cookie的时候,
    		 * 都要进行setHeader的操作,显得比较繁琐;
    		 * 设计者引入面向对象的思想进行设计
    		 * 设计出了cookie操作的简化版本:
    		 * 
    		 * response.addCookie(cookie);
    		 */
    		
    		
    		// 2. 使用请求头获取cookie里面的数据
    		String c1 = request.getHeader("cookie");
    		/*
    		 * 同样:
    		 * 浏览器在下次访问服务器的时候,
    		 * 开发者也得通过请求头进行cookie
    		 * 数据的传输的话,也显得比较繁琐
    		 * 推出getHeader("cookie");的简化
    		 * 版本
    		 * 
    		 * request.getCookie();
    		 * 因为cookie中的数据可能有多条
    		 * 所以此方法返回的是一个Cookie
    		 * 类型的数组
    		 * Cookie[] cookies = request.getCookies();
    		 */	
    				
    		// System.out.println(c1);
    		
    		
    		// 全部使用简化版本的操作
    		// 1) 创建cookie对象,保存会话数据
    		Cookie cookie1 = new Cookie("stu_name", "mzy");
    		
    		/*
    		 * 设置有效路径:(默认如果你不设置的话,就设置到当前的目录下)
    		 * cookie的setPath的作用就是设置cookie的使用范围:
    		 * 当我们在访问对应的path路径下的时候,才会携带这条cookie
    		 * 信息,其它的时候,并不会携带此cookie的信息。
    		 */
    		// cookie1.setPath("/MyFirstServlet");
    		
    		/*
    		 * 设置有效时间:
    		 * 		正整数:表示超过了正整数的数值的时间,cookie就会丢失!(保存在硬盘中)
    		 * 		负整数:表示浏览器关闭了,cookie信息就丢失!(保存在浏览器内存)
    		 * 		什么都不设置默认情况下就是一个负整数;
    		 * 		0:表示删除同名的cookie  
    		 * 		删除同名的cookie的原理就是,提交一个同名的cookie;
    		 * 		比如都是stu_name		进行提交了之后
    		 * 		设置这个cookie的有效时间为0;表示立即消失
    		 */
    		// cookie1.setMaxAge(20); // 20秒之后就清除这个cookie信息
    		cookie1.setMaxAge(-1); // 这个负数的值本身没有关系,负多少都一样
    		
    		Cookie cookie2 = new Cookie("stu_id", "1633140111");
    		/*
     		 *  但是在cookie中存入中文信息的时候要注意
     		 *  如果不对cookie中的中文信息进行加密的话
     		 *  就会出现错误!500(服务器端的错误)
     		 *  
     		 *  使用之前的URLEncoder进行加密
     		 *  使用之前的URLDecoder进行解密
     		 */
     		String name = URLEncoder.encode("张三", "utf-8");
     		Cookie cookie3 = new Cookie("stu_name", name);
     		/*
     		 * cookie中同名的信息只能存储一个。(默认为存储后者)
     		 */
     		response.addCookie(cookie1);
     		response.addCookie(cookie2);
     		response.addCookie(cookie3);
     		
     		Cookie[] cookies = request.getCookies();
     		int len = 0;
     		if(cookies != null) {
     			for (Cookie cookie : cookies) {				
     				String value = cookie.getValue();
     				value = URLDecoder.decode(value, "utf-8");
     				System.out.println(cookie.getName()+"="+value);
     				len++;
     			}
     			System.out.println(len);
     		} else {
     			System.out.println("cookies中没有数据");
     		}
     		
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");	
    	}
    
    }
    

  • 相关阅读:
    Jmeter中的几个重要测试指标释义
    接口测试考虑
    树Hash学习笔记
    kali linux主题美化
    Kali Linux 终端字体配色
    解决github无法打开
    Python requests数据的content和text的区别
    Python+adb操作移动端自动化测试
    linux后台运行python程序
    洛谷P2791 幼儿园篮球题 另解
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053511.html
Copyright © 2011-2022 走看看