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. 使用pymysql循环删除重复数据,并修改自增字段偏移值

    创建表: CREATE TABLE `info` ( `id` tinyint NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMAR ...

  2. C#/.NET/.NET Core学习视频汇总(持续更新ing)

    前言: 之前有很多小伙伴在我的公众号后台留言问有没有C#/.NET/.NET Core这方面相关的视频推荐,我一般都会推荐他们去B站搜索一下.今天刚好有空收集了网上一些比较好的C#/.NET/.NET ...

  3. 单细胞分析实录(19): 基于CellPhoneDB的细胞通讯分析及可视化 (下篇)

    在上一篇帖子中,我介绍了CellPhoneDB的原理.实际操作,以及一些值得注意的地方.这一篇继续细胞通讯分析的可视化. 公众号后台回复20210723获取本次演示的测试数据,以及主要的可视化代码. ...

  4. 网络损伤仪WANsim中关于丢包的介绍

    网络损伤仪WANsim中的4种丢包模型 丢包是指在网络上传输的数据包无法到达指定目的地.丢包在广域网中是一个很常见的问题.想要模拟出真实的广域网环境,对丢包的精确模拟是必不可少的. 在网络损伤仪WAN ...

  5. 记一次系统崩溃事件【Mac版】

    事件:Mac系统崩溃,导致电脑数据丢失,以及数据安全备份措施的不到位的教训! 解决措施: 1.开机后按:Command+R 按开机键 ,进入Mac 实用工具, 选择磁盘工具.由于没有备份直接抹掉磁盘. ...

  6. 使用Elastic Job的时候报“Job conflict with register center”,如何处理?

    昨天,有群友反应根据之前这篇<使用Elastic Job实现定时任务>文章编写测试定时任务的时候,报了类似下面的这个错误: Caused by: org.apache.shardingsp ...

  7. Python实用案例,Python脚本,Python实现批量加水印

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  8. 破解网站码验证,Java实现,不调用任何平台api接口

    package image.images; import java.io.File; import java.io.IOException; import java.io.InputStream; i ...

  9. vue实现单点登录的N种方式

    最近项目停工了,RageFrame的学习暂时告一段落,这一篇给大家分享下有关单点登录的相关知识,并提供一些demo给大家参考,希望对想了解的朋友有一些帮助. 话不多说,先上原理(借鉴地址:https: ...

  10. Android招聘市场技术要求越来越高,从事三年开发是否应该考虑转行?

    这是在某论坛看到的一个网友的疑问,他说感觉现在Android 开发这条路越来越难走了.下面是他的分享: 本来已经做好了好几个月找不到工作的准备.不过这两周感觉面试机会还算可以.两周10个面试感觉刚刚好 ...