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");
} }

初识cookie的更多相关文章

  1. ASP.NET 初识Cookie

    1.ASP.NET中使用Cookie 0.说明 Cookie存在客户端电脑上,Session存在服务器上,所以保存登录信息等敏感信息时不能使用Cookie,用户个性化设置可以使用Cookie 1.新建 ...

  2. django的Cookie Session

    Cookie 初识cookie的设置和获取 示例 from django.shortcuts import render, redirect from django.shortcuts import ...

  3. 《深入浅出Node.js》第8章 构建Web应用

    @by Ruth92(转载请注明出处) 第8章 构建Web应用 一.基础功能 请求方法:GET.POST.HEAD.DELETE.PUT.CONNECT GET /path?foo=bar HTTP/ ...

  4. [oldboy-django][2深入django]cookies + session

    1.1 cookies - 初识cookie a.cookie是保留在浏览器端的键值对 b.服务端可以向客户端写cookie c.客户端每次发送请求,会携带cookie一起发送过去,而且cookie是 ...

  5. Django框架 之 Cookie和Session初识

    Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...

  6. Cookie初识篇

    一.什么是Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109和2965都 ...

  7. 初识 Asp.Net内置对象之Cookie对象

    Cookie对象 Cookie对象用于保存客户端浏览器请求的服务器页面,也可用于存放非敏感性的用户信息,信息保存的时间可以根据用户的需要经行设置.并非所有的浏览器都支持Cookie,并非数据信息都是以 ...

  8. AJAX异步、sweetalert、Cookie和Session初识

    一.AJAX的异步示例 1. urls.py from django.conf.urls import url from apptest import views urlpatterns = [ ur ...

  9. cookie的初识和运用(js和jq)

    cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...

随机推荐

  1. IO流 connect reset

    目录 出现场景 解决思路 出现场景 通过外部OBS下载10文件,然后通过工具将这10个文件打包成一个文件A.zip上传,最后将这个A.zip下载并解压,解压A.zip后发现文件数量不是10个. 解决思 ...

  2. PAT甲级:1124 Raffle for Weibo Followers (20分)

    PAT甲级:1124 Raffle for Weibo Followers (20分) 题干 John got a full mark on PAT. He was so happy that he ...

  3. RedHat7.4安装在个人电脑(笔记本)中安装遇到的问题总结

    RedHat7.4安装在个人电脑(笔记本)中安装 以下纯属个人在安装过程中遇到问题的一些总结,如果有描述不恰当的地方,还请给予指出,欢迎大家评论和交流. 物理主机的配置: 硬件配置: 华硕A456U笔 ...

  4. selenium 配置ie11 浏览器

    1.IEDriverServer下载与配置 用淘宝的镜像地址:https://npm.taobao.org/mirrors/selenium/. 选3.0版本的  IEDriverServer_x64 ...

  5. shell脚本(11)-流程控制case

    一.case介绍 生产环境下,遇到要根据不同的状况执行不同的预案的情况,首先根据可能出现的情况写出对应预案,根据出现的情况来加载不同的预案 特点:根据给予的不同的代码块 二.case语法 case 变 ...

  6. (JAVA1)学习,复习的好帮手

    学习准备:博客 博客,英文名Blog,它的正式名称为网络日记. 为什么要写博客 我们学习任何东西都需要总结和思考.有时候我们一直在赶路,却忘了放慢脚步 提升文笔组织能力 提升学习总结能力 提升逻辑思维 ...

  7. IE浏览器 查看Form对象

    在ie的debug窗口中,查看form中的值,从form.all("OtherNo").value = 赋值;(fm.all('ActionFlag').value = " ...

  8. Python - dict 字典常见方法

    字典详解 https://www.cnblogs.com/poloyy/p/15083781.html get(key) 作用 指定键,获取对应值 两种传参 dict.get(key):键存在则返回对 ...

  9. 【译】使用 Source Link 提高调试效率

    有多少次你在调试器中追踪一个缺陷,通过代码,观察局部变量的值改变,当你碰壁--不是你所期待的值和你不能进入的方法,因为它来自类库或 .NET 框架本身:或者您设置了一个条件断点,等待检查某个值是如何设 ...

  10. kivy里rgb,rgba颜色相关知识,以及支持十六进制颜色值方法

    rgb,rgba在kivy里的格式为如下: rgb:1,1,1---->每个参数为0-1的数值(如0.1),也就是说第一位如果是0.1意思是10%的红色,由r代表,g代表绿色,b代表蓝色 rgb ...