Java EE : 二、图解 Cookie(小甜饼)

目录

Java EE : 一、图解Http协议

Java EE : 二、图解 Cookie(小甜饼)

Java EE : 三、图解Session(会话)

概述

一、概述

二、详细介绍Cookie 传输过程

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

四、总结

参考

一、概述

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

Cookie是什么?

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

Cookie有什么用呢?

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

下面我们访问百度地址。

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

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

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

二、详细介绍Cookie 传输过程

直接上图,一一详细解释。顺便写个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值。如图:

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

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

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

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

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

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

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

?


1

2

3

4

5

6

7

8

9

CookieName

CookieValue

localhost/servletBYSocket/

9728

 3416923392

 30449698

 3325104969

 30449698

 *

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

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

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

不多解释,看图。

⑤ 服务器获取

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

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

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

② 服务端的Cookie写入浏览器

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

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

⑤ 服务器获取

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

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

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

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

四、总结

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

1、What 什么是Cookie

2、How Cookie怎么用,干嘛用



参考

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

时间: 2024-11-08 16:07:10

Java EE : 二、图解 Cookie(小甜饼)的相关文章

Java EE : 一、图解Http协议

目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.技术基石及概述 二.深入理解技术基石和工作流程 三.详解工作过程的HTTP报文 四.HTTP协议知识补充 五.关于HTTP协议的Web应用框架或者规范 六.总结 参考 一.技术基石及概述 问:什么是HTTP?答:HTTP是一个客户端和服务器端请求和响应的标准TCP.其实建立在TCP之上的. 当我们打开百度网页时,是这样的: https

Java EE : 三、图解Session(会话)

目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.Session由来 二.Session机制 三.详细介绍Seesion机制过程 四.补充 五.总结 参考 一.Session由来 HTTP的无状态,也就是说,每次请求都是独立的线程.举个例子吧:购物中,你选择了A商品,加入购物车,这就是A线程.然后在选择B商品就是B线程.可是每次线程独立(对容器而言,A.B成了不同的用户),线程A不知

Java EE小知识

Tips:网络开发中有两种开发模式: C/S模式(Client/Server):如QQ.MSN: B/S模式(Brower/Server):如网上购物.论坛 静态请求:通常以.html或.htm为后缀的,代码固定: 动态请求:通常以.jsp或.php为后缀,代码拼凑而成. 相比较静态web,动态web可进行数据库操作,最大特点是交互性 JSP的前身是Servlet(服务器端小程序),servlet可分为简单servlet.过滤servlet(过滤器).监听servlet(监听器),servlet

Java EE之Servlet技术

Java EE之Servlet技术 java Servlet介绍 Java Servlet是java EE标准规范之一.Servlet是Java Web 技术的核心基础, 因此掌握好Servlet是很有必要的.掌握Servlet的工作原理是成为一名合格的 Java Web技术开发人员的基本要求. Servlets are very important topic of Java EE and all of the web applications framework such as Spring

Java EE 的核心技术规范(介绍)

JAVA EE简介 Java 平台企业版(Java Platform Enterprise Edition),java EE平台旨在帮助开发人员创建大规模,多层,可伸缩,可靠和安全的网络应用程序.此类应用程序的简称是“企业应用程序”,之所以这么称呼是因为这些应用程序旨在解决大型企业遇到的问题.但是,企业应用程序不仅对大型公司,代理机构和政府有用.对于日益联网的世界中的个人开发人员和小型组织,企业应用程序的好处是有益的,甚至是必不可少的. Java EE服务器 Java EE服务器是实现Java

JAVA EE 项目经常使用知识 之AJAX技术实现select下拉列表联动的两种使用方法(让你真正理解ajax)

ajax 下拉列表联动的使用方法. ajax的定义: AJAX 是一种用于创建高速动态网页的技术. 通过在后台与server进行少量数据交换,AJAX 能够使网页实现异步更新.这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行更新. ajax效果的一个样例: 区域为空的时候,维护人情况: 选了一个区域后的情况:(选 舒城县 联带出来的维护人员 小刘) 一.原生态的js实现 XMLHttpRequest 是 AJAX 的基础 XMLHttpRequest 对象 全部现代浏览器均支持 X

【Java EE 学习第25天】【网上图书商城项目实战】

一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理员): 1.登陆 2.角色管理 3.用户管理 4.图书分类 5.图书管理 6.图书商家 7.发货管理 三.项目截图 1.普通用户 (1)浏览(分类浏览,代码重用) 分类浏览: 单本书浏览: (2)普通用户登陆 (3)普通用户注册 (4)普通用户购物 浏览页面加入购物车: 详情页加入购物车 (5)查看

java ee自学路线

本站文章为 Kenan 原创,转载请注明转自 Kenan的博客 http://kenan1992.qzone.qq.com 首先声明对于什么java ee的 自学不需要编程的基础,但是需要你的刻苦和努力,付出100%的努力,相信你终会有收获的那一天!!! 各位同学加油!o(∩_∩)o 哈哈,,,,,, 一,开发工具的使用,初期使用记事本,Edit Plus ---->Eclipse ---->myeclipse 对于初学者来说,初期用记事本等直接编写代码有利于我们了解java代码的底层运作,对

Java EE学习路线

java EE学习路线 一.java基础 1.初识Java 内存  数据  变量     2.结构语句        1)条件           if  switch        2)循环           for  while        3)语句           break  continue    3.数组    4.嵌套循环    5.最终任务 万年历      2048小游戏  二.面向对象 1.类和对象 2.方法    3.String()       Date  cal