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. LeetCode 887. Super Egg Drop

    题目链接:https://leetcode.com/problems/super-egg-drop/ 题意:给你K个鸡蛋以及一栋N层楼的建筑,已知存在某一个楼层F(0<=F<=N),在不高 ...

  2. 单点登录详解(token简述)(七)

    前言 为什么整理单点登录? 主要的原因还是自己以前学习的时候曾经用过,但是时间太久,忘记了里面用到了哪些技术.及如何实现的,每次想到单点登录总是感觉即会又不会,这次整理session时,又涉及到了单点 ...

  3. 类似express的路由封装方式

    1.原理 主要过程涉及三个元素的定义,如下: //用于承载一系列方法的对象 var funObj = {}; //用于根据条件执行funObj中的方法 var app = function(){}; ...

  4. Linux符号描述

    &  表示任务在后台执行,如要在后台运行redis-server,则有  redis-server &&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo ...

  5. python 管理工具

    pip 包管理工具 virtualenv 虚拟环境管理工具 切换目录 virtualenvwrapper 虚拟环境管理工具加强版 pyenv python版本管理工具 修改环境变量 pyenv-vir ...

  6. Java基础——ArrayList方法全解(字典版)

    引言 在使用集合 ArrayList 的时候,经常使用add.remove等,其他的没用过,甚至没听说过的还有很多.现在在这个教程中,简单的了解一下,不要求全都记下.相当于在你脑袋里建一个索引,就是有 ...

  7. lis分析之一一批处理(任务)如何连接数据库的

    public class ZFBCheckAccountTask extends TaskThread { } 这个类运行时候自动加载了数据库连接,不明白是如何提前加载的,开始用static { } ...

  8. 公有组件ShowCodeList实现原理之一一下拉框的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. solr(CVE-2019-17558)远程命令执行

    影响版本 Apache Solr 5.x到8.2.0版本 测试 https://github.com/jas502n/CVE-2019-0193

  10. 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...