热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaEE要懂的小事:二、图解Cookie(小甜饼)

Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketFaceBook:BYSoc

Writer      :BYSocket(泥沙砖瓦浆木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

上一篇 图解Http协议 ,这次继续Http家族中的COOKIE。泥瓦匠最近看到博客园中一篇好文,如图:

image

这就是因为浏览器COOKIE太大,导致请求时,请求头域过大造成发送失败。下面咱们就了解了解COOKIE。按着以前的思路图文并茂哈,没图说个XX。

一、概述

首先从HTTP说起,COOKIE是Http协议中那部分呢?

COOKIE是什么?

自问自答:COOKIE是请求头域和响应头域的字段。简单地说,就是伴随请求和响应的一组键值对的文本,小文本。所以称之为”COOKIE“饼干。COOKIE的生命来源于服务器。首先是客户端请求服务端,此时请求为第一次,无COOKIE参数。这时候,服务端setCOOKIE发送给客户端。记住,COOKIE来源自服务端

COOKIE有什么用呢?

又自问自答:COOKIE来源自服务端,当然服务于客户。就像你我的会话,文字是在我们之间传递的。所以COOKIE用于服务端和客户端的会话。因为Http协议是无状态的,COOKIE就是维持会话,说白了就是传递数据的额外媒介。

下面我们访问百度地址。

① 产生于服务端Response,在响应头域

image

② 请求头域是这样的:(可以在COOKIE Tab页发现,和响应有一样的)

image

下面泥瓦匠详细介绍其COOKIE在 请求和响应 的传输过程。

二、详细介绍COOKIE 传输过程

COOKIE Work

直接上图,一一详细解释。顺便写个COOKIEServlet,模拟一下COOKIE的一生。代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package org.bysocket.http;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet(urlPatterns="/COOKIE")
public class COOKIEServletT extends HttpServlet
{
     private static final long serialVersiOnUID= 1L;
 
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException
     {
         // 获取COOKIE
         COOKIE[] COOKIEs = req.getCOOKIEs();
         for (COOKIE COOKIE : COOKIEs)
             System.out.println(COOKIE.getName() + " " + COOKIE.getValue());
 
         // 创建COOKIE
         COOKIE COOKIE = new COOKIE("COOKIEName", "COOKIEValue");
         COOKIE.setMaxAge(10);
         COOKIE.setHttpOnly(true);
         resp.addCOOKIE(COOKIE);
         
         // 响应
         PrintWriter pw = resp.getWriter();
         pw.print("< html >< body >< h1 >Hello,COOKIE! h1 > body > html >");
     }
     
}

① 客户端访问,无服务端写入的COOKIE。

代码 new COOKIE(“COOKIEName”, “COOKIEValue”); 可以看出服务端产生一个新的键值对COOKIE,并且设置,说明第一次请求时,请求的请求头域COOKIE是没有的。下面没有COOKIEName=COOKIEValue 的COOKIE值。如图:

image

② 服务端的COOKIE传至浏览器。

代码中 HttpServletResponse.addCOOKIE(COOKIE); 这样响应就加入了刚刚那个键值对COOKIE。怎么传到浏览器(客户端)呢? 同样F12下,

image

从图中可得到,COOKIE是通过HTTP的响应头域发送至浏览器。每个COOKIE的set,都有一个对应Set-COOKIE的头。还有其中的时间代表COOKIE的存活时间,HttpOnly可是此COOKIE只读模式。

③ 浏览器解析COOKIE,保存至浏览器文件。

直接可以打开IE的Internet选项:

image

如图,那个位置文件就是我们COOKIE存的地方。既然在哪里,泥瓦匠就去找到它。

image

打开看看,其内容就是:存放着COOKIE信息和URL信息及一些关于时间的。

?
1
2
3
4
5
6
7
8
9
COOKIEName
COOKIEValue
localhost/servletBYSocket/
9728
  3416923392
  30449698
  3325104969
  30449698
  *

这样就完全搞懂了COOKIE如何写入浏览器。

④ 客户端访问,有服务端写入的COOKIE。

这样,同样的URL再次访问时,F12下:

image

不多解释,看图。

⑤ 服务器获取

服务端这时呢?只要简单的 getCOOKIEs() 就可以获取COOKIE列表了。如图,服务端控制台打印如下:

image

泥瓦匠记忆小抄:COOKIE传输小结

① 客户端访问,无服务端写入的COOKIE

② 服务端的COOKIE写入浏览器

③ 浏览器解析COOKIE,保存至浏览器文件

④ 客户端访问,有服务端写入的COOKIE

⑤ 服务器获取

四、谈COOKIE的作用到XSS(跨站点脚本攻击)

COOKIE没有病毒那么危险,但包含敏感信息。比如最常见的记住密码,或者一些用户经常浏览的网页数据。如图:

u=3426833575,3625518714&fm=21&gp=0

用户不希望这些泄露,甚至被攻击。但事实上存在这个攻击,究竟怎么攻击呢?我在 跨脚本攻击XSS 一文中也详细介绍并提出解决方案。

全名:Cross Site Script,中文名:跨站脚本攻击。顾名思义,是指“HTML注入”纂改了网页,插入恶意的脚本,从而在用户用浏览网页的时候,控制用户浏览器的一种攻击。一般攻击的套路如图所示:

image_thumb7

五、总结

回顾全文,COOKIE是HTTP协议中的一种会话机制。也明白下面两个问题就好了

1、What 什么是COOKIE

2、How COOKIE怎么用,干嘛用

Writer      :BYSocket(泥沙砖瓦浆木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 通过优化动态网络Cookies的全网互通机制,实现了用户在任意子站点的登录和注销操作均能同步至整个网络。具体实现涉及对三个关键文件的修改:首先,在`incDv_ClsMain.asp`中定位并调整`Response.Cookies`的相关设置;其次,更新`global.asa`以确保会话状态的一致性;最后,修改`login.asp`以支持跨域认证。这一改进不仅提升了用户体验,还增强了系统的安全性和可靠性。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
author-avatar
mobiledu2502879833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有