一、什么是cookie?
①:Cookie翻译过来是饼干.
②:Cookie是服务器通知客户端保存键值对的一种技术.
③:每个 Cookie的大小不能超过4kb
④:每次请求的时候,只要客户端有Cookie,都会被发送给服务器.

二、如何创建Cookie?
①:在服务器端new Cookie( name, value ) ;
②:调用 response.addCookie( cookie ); 通知客户端Cookie 保存( 或修改 )

 /*** 创建cookie* @param request* @param response*/public void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {//        1、创建cookie,只有有参构造Cookie cookie = new Cookie("key","value");
//        2、调用 response.addCookie( cookie ); 通知客户端Cookie 保存( 或修改 )response.addCookie(cookie);Cookie cookie1 = new Cookie("cccKey","cccValue");response.addCookie(cookie1);response.setContentType("text/html;charset=UTF-8");response.getWriter().write("已经创建cookie,并返回");}

三、服务器如何获取客户端发送过来的Cookie?
①:当浏览器向服务器发送请求时,浏览器中有cookie,只要发请求,就会将cookie的相关信息发送给服务器(通过请求头)
②:服务器获取浏览器中传递的cookie,只需要使用api—》request.getCookies():Cookie[] 即可得到全部Cookie
// cookie.getName() 获取Cookie的键或名称 值
// cookie.getValue() 获取当前Cookie的值

/*** 获取创建的cookie信息* @param request* @param response* @throws IOException*/public void getCookies(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");
//        1、获取前台传递的所有cookieCookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for (Cookie cookie:cookies) {//                2、将获取到的cookie具体信息写到页面展示response.getWriter().write(cookie.getName() +":"+ cookie.getValue() + "<br/>");}}//        3、获取具体的cookieCookie cookie = CookieUtils.findCookie("key",cookies);if(cookie != null){System.out.println(cookie.getName());response.getWriter().write("亲爱的.我找到了你要的Cookie <br>");}}

四、cookie值得修改
①:
直接在服务器端创建一个同名的cookie对象,
在创建的构造器方法中直接赋于新值,
调用 response.addCookie( cookie ); 通知客户端保存修改
②:
先查找到需要修改的Cookie对象
调用 setValue() 方法设置新的值
调用 response.addCookie() 通知客户端保存

 /*** 修改cookie* @param request* @param response*/public void upCookie(HttpServletRequest request, HttpServletResponse response){/*** 方案一:* 1 直接在服务器端创建一个同名的cookie对象   === 修改aaa值为aaaNewValue* 2 在创建的构造器方法中直接赋于新值*/Cookie cookie = new Cookie("cccKey","cccNewKey");response.setContentType("text/html;charset=UTF-8");response.addCookie(cookie);/*** 方案二:* 1 先查找到需要修改的Cookie对象* 2 调用 setValue() 方法设置新的值* 3 调用 response.addCookie() 通知客户端保存*/Cookie cookie1 = CookieUtils.findCookie("key",request.getCookies());
//        注意:如果Cookie值为中文,建议使用BASE64编码后再保存cookie1.setValue("newValue");response.addCookie(cookie1);}

五、cookie得生命周期
Cookie也是有存活时长的.Cookie的存活时长由一个api设置决定.
setMaxAge()
1 正数 表示浏览器在指定的秒数后被删除 ( 或失效 )
2 负数 表示浏览器关闭,Cookie就会被删除( 默认值也是-1 )
3 零 表示浏览器收到响应后,马上删除Cookie

 /*** 设置cookie声明周期* setMaxAge()*         1 正数        表示浏览器在指定的秒数后被删除 ( 或失效 )*        2 负数        表示浏览器关闭,Cookie就会被删除( 默认值也是-1 )*         3 零     表示浏览器收到响应后,马上删除Cookie* @param request* @param response*/public void cookieLife(HttpServletRequest request, HttpServletResponse response) throws IOException {//        1、创建cookieCookie cookie = new Cookie("life3600","life3600");
//        2、设置cookie的存活时间cookie.setMaxAge(60 * 60);response.addCookie(cookie);response.setContentType("text/html;charset=UTF-8");response.getWriter().write("创建一个可以存活一小时的cookie");}

六、Cookie有效路径Path的设置
Cookie的path路径,可以设置Cookie在哪些请求下才发送给服务器.
①:Cookie1 的path为: /工程路径 表示请求地址为: http://ip:port/工程路径/所有资料 都会发送给服务器.
②:cookie2 的path为:/工程路径/abc 表示请求地址为: http://ip:port/工程路径/abc/* 都会发给服器.
示例:
比如现在有两个Cookie
CookieA path=/工程路径
CookieB path/工程路径/abc
请求有以下几个:
http://ip:port/工程路径/a.html
CookieA 会发
CookieB 不发
http://ip:port/工程路径/abc/a.html
CookieA 会发
CookieB 会发

 /*** 测试cookie有效路径的设置* @param request* @param response* @throws IOException*/public void testCookiePath(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");Cookie cookieA = new Cookie("cookieAKey","cookieAValue");
//        cookieA设置的路径为:/atguigu8_cookieAndsession    其也是默认值cookieA.setPath(request.getContextPath());response.addCookie(cookieA);Cookie cookieB = new Cookie("cookieBKey","cookieBValue");
//       cookieB设置的路径为:/atguigu8_cookieAndsession/abccookieB.setPath(request.getContextPath() + "/abc");response.addCookie(cookieB);response.getWriter().write("创建了两个Cookie用于对比");}
}

七、免输入用户名登录—使用cookie完成的功能
免用户名登录指的是,一个表单.当用户第一次访问的时候,是需要登录的.第一次登录成功后.
用户名就会被记录下来.当用户第二次访问的时候,这个表单里就会直接有之前登录的用户名信息,只需要输入密码即可.

/*** 免 用户名登录*/
@WebServlet(name = "UserServlet" ,urlPatterns = "/userServlet")
public class UserServlet extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");String username = req.getParameter("username");String password = req.getParameter("password");if("admin".equals(username) && "admin".equals(password)){Cookie cookie = new Cookie("username",username);
//            设置cookie存活周期为一周cookie.setMaxAge(60 * 60 * 24 * 7);resp.addCookie(cookie);resp.getWriter().write("登录成功");}else {req.getRequestDispatcher("/login.jsp").forward(req,resp);}}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录页面-</title>
</head>
<body><form action="${pageContext.request.contextPath}/userServlet" method="post">用户名:<input type="text" id="username" name="username" value="${cookie.username.value}" /><br>密码:<input type="password" name="password" id="password" /> <br><input type="submit" value="免用户名登录"></form>
</body>
</html>

Cookie知多少?相关推荐

  1. Python模拟登陆,解密js代码实例:知乎登陆

    本文转载自公众号 | 日常学Python 作者 | sergiojune 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串 image 看了之后是不是很痛苦?你是不是就想使用 s ...

  2. 如何搞定知乎模拟登陆的加密难题?

    作者 | sergiojune 责编 | 郭芮 声明:以下内容仅交流学习,请勿用于非法用途. 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串: 看了之后是不是很痛苦?你是不是就 ...

  3. HTTP 最强资料大全

    HTTP最强资料大全 更新内容:新增视频教程 - WEB系统测试.PHP的HTTP协议.okhttp框架解析与应用.走进Requests库.接口测试基础入门篇.JMeter之HTTP协议接口性能测试: ...

  4. HTTP最强资料大全

    更新内容:新增视频教程 - WEB系统测试.PHP的HTTP协议.okhttp框架解析与应用.走进Requests库.接口测试基础入门篇.JMeter之HTTP协议接口性能测试: 为了方便有兴趣的朋友 ...

  5. 按键精灵开发者认证1-6题库

    这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...

  6. 利用cookie模拟登陆知乎

    我们知道一些网站是需要账号密码才可以登陆的,例如知乎.而利用requests库里的get方法的headers参数可以达到这个目的 首先在知乎的网页上登陆自己的知乎账号,利用chrome的开发者工具(F ...

  7. 知乎cookies的介绍_使用cookie登陆知乎

    只是想说明一个问题,Cookie可以维持登录状态,有些网页当中,访问之后的cookie里面带有登陆账号,和登陆密码,这样可以使用cookie直接访问网页,如知乎,首先登录知乎,将Headers中的Co ...

  8. python requests cookie保存_Python爬虫教程:爬取知乎网

    知乎已经成为了爬虫的训练场,本文利用Python中的requests库,模拟登陆知乎,获取cookie,保存到本地,然后这个cookie作为登陆的凭证,登陆知乎的主页面,爬取知乎主页面上的问题和对应问 ...

  9. cookie登录知乎

    用cookie登录个人知乎主页 步骤: 1.用自己账号登录知乎,然后复制下来自己的cookie信息.2.用request.get(url,headers=headers)把cookie传入get请求中 ...

最新文章

  1. CPU和GPU跑深度学习差别有多大?
  2. 如何在一个背景图像上,做半透明的图。
  3. 第 1 章 虚拟化 - 013 - 动手实践 Linux VLAN
  4. HDU.2561 第二小整数(water)
  5. arduino编译失败_Arduino编译时失败
  6. 【DP】砝码称重 (ssl 1072)
  7. keep老是显示服务器开小差,nginx+keepalived高可用服务器宕机解决方案
  8. opencv Mat push_back
  9. oracle自定义函数获取省份,Oracle 自定义函数Function
  10. mysql 视图报错_MySQL使用Union创建视图报错
  11. jquery实现某宝放大点击切换
  12. VC++ 设置桌面壁纸
  13. win10无法新建文件夹怎么办?(已解决)
  14. oracle同义词只有谁可以使用,oracle 同义词(synonym)
  15. 惠普笔记本U盘重装系统教程(转载)
  16. 2020年小博公众号文章集锦
  17. 梦幻西游手游转区没服务器显示不出来,《梦幻西游手游》怎么转服 转服需要满足条件介绍...
  18. 跨平台Brave浏览器(一百零三)
  19. New Bing已经出来了,怎么防止Bing跳转到国内版(cn.bing.com)?
  20. appium连接vivo手机,启动APP后就不动了--其它手机正常

热门文章

  1. 数据库(四)_MySQL索引
  2. dede织梦文章页获取上一篇下一篇的链接地址
  3. 使用腾讯地图批量转换地址为经纬度坐标
  4. soot数据流 -- 基于soot的过程内数据流分析
  5. vue H5短视频列表
  6. 「津津乐道播客」#392 原汤话原食:仲夏夜,马砂、肉串儿、趿拉板儿
  7. 相遇是缘分,相处是福分,相知是情分
  8. 妙用Spybot让间谍软件在你的电脑上无处遁形(转)
  9. 【能效管理】关于某旅游度假中心项目水世界能源管理系统的设计与应用浅析
  10. 拉绳位移传感器在测量中的精度大家会算吗