实验用的浏览器firefox,并安装了HttpFox插件,以sniffer网络报文的。
【请求】
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
【响应】
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=fa455d31-38d3-4fc5-bb09-b55ffce22ad5 (通过UUID生成的)
(注:尽管服务端在设置cookie时并没有指定域名,路径和有效期;此时,浏览器会去默认值。
Name Value Path Domain Expires
ssoSessionId fa455d31-38d3-4fc5-bb09-b55ffce22ad5 / localhost:8080 End Of Session (-1 表示关闭浏览器后则结束)
注意:浏览器要管理来自各个站点的cookie,所以,要给每个cookie用一个Domain来标识是来自哪个站点的。
)
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 08:31:23 GMT
==================================================
【请求】 (ssoSessionId被重置)
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Cookie ssoSessionId=fa455d31-38d3-4fc5-bb09-b55ffce22ad5 (上一次保存下来的ssoSessionId)
Cache-Control max-age=0
【响应】
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=8d934ed9-e359-4d92-ba65-335fdc284322 (服务端重新生成了一个UUID,浏览器接收后会覆盖原来的ssoSessionId)
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 08:36:07 GMT
==========================================
服务端人为把cookie设置成一个虚假的Domain和Path. 这样,浏览器接
String newSsoId = generateID();
Cookie tCookie = new Cookie(SSO_SESSION_ID,newSsoId);
tCookie.setDomain(".cookie.fundamental");
tCookie.setPath("/cookie/path/");
第一次访问: http://localhost:8080/HelloWorld/cookiebase.do
【1、 请求】
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
【2、响应】
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=67c4f682-2f20-4286-be88-d26f6fee6c54; Domain=.cookie.fundamental; Path=/cookie/path/
(注意: 浏览器对于这种虚假的Domain不会接收,在firefox中的cookie管理器中看不到域.cookie.fundamental的cookie信息。
推测: 如果看cookie的rfc,那么这个Domain和Path应该主要是给浏览器用的。)
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 09:13:37 GMT
=============================================================
持久的Cookie 设置了cookie的MaxAge等于一个小时
【1、请求】
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
【2、响应】
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=8ddb8c01-a265-4b3f-a7b4-4feee80dbfc3; Expires=Sat, 14-Feb-2009 10:37:41 GMT
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 09:37:41 GMT
关闭浏览器,注意:同时浏览器的cookie设置方面应该设置成“依据有效期使cookie失效果”。打开时,我们再访问刚才的url。
【3、请求】
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Cookie ssoSessionId=ed6862c1-4c13-4527-93de-0c4a21e74060
【4、响应】
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=9574abbf-35e3-43f9-8642-095644139aac; Expires=Sat, 14-Feb-2009 10:43:54 GMT
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 09:43:54 GMT
(人们常常说,“持久的cookie”,其实只是表示“cookie是可以被客户端持久化下来的,但是设置的MaxAge不同,持久的时间不同,如果MaxAge=-1则表示浏览器一关闭,Cookie信息就删除”。注意,有些浏览器的cookie信息是可以编辑的。IE可以通过编辑文件来编辑,而Opera则可直接通过cookie管理器来编辑。
同一个站点设置两个cookie,然后过期时间不同。)
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
某个请求的响应,我们再把浏览器关闭,看看请求。
(Status-Line) HTTP/1.1 200 OK
Server Apache-Coyote/1.1
Set-Cookie ssoSessionId=5daf8657-5cb0-4fcb-b01d-aef789360ac4; Expires=Sat, 14-Feb-2009 11:00:24 GMT
Set-Cookie quit=QUIT (包头中有两个:Set-Cookie)
Transfer-Encoding chunked
Date Sat, 14 Feb 2009 10:00:24 GMT
关闭浏览器,看ssoSessionId是不是依然会保存,而quit是不是没有了。
(Request-Line) GET /HelloWorld/cookiebase.do HTTP/1.1
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Cookie ssoSessionId=4bca407e-c50d-4a1d-9e66-7fdc886a6a51 (quit这个cookie已经没有了)
============================
package com.eyesmore.sessiontracking;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieFundamental extends HttpServlet {
private static final long serialVersionUID = -5446885073873015943L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String oldSsoId = getCookieValue(SSO_SESSION_ID, request);
String newSsoId = generateID();
Cookie tCookie = new Cookie(SSO_SESSION_ID,newSsoId);
// tCookie.setDomain(".cookie.fundamental");
// tCookie.setPath("/cookie/path/");
tCookie.setMaxAge(60*60);//1小时,观察当浏览器退出时,该cookie信息会不会被持久化到文件
response.addCookie(tCookie);
Cookie quitCookie = new Cookie("quit","QUIT");
// quitCookie.setMaxAge(-1); 默认值-1,表示退出浏览器时,则删除该cookie
response.addCookie(quitCookie);
PrintWriter writer = response.getWriter();
if(oldSsoId != null) {
writer.write("Cookie you sent: Name="+SSO_SESSION_ID+" Value="+oldSsoId+"<br>");
} else {
writer.write("No such a cookie named "+SSO_SESSION_ID+" you sent."+"<br>");
}
writer.write("Cookie you received: Name="+SSO_SESSION_ID+" Value="+newSsoId+"<br>");
writer.flush();
}
private String generateID() {
return UUID.randomUUID().toString();
}
private static final String SSO_SESSION_ID = "ssoSessionId";
private String getCookieValue(String name,HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
if(cookie.getName().equals(name)) {
return cookie.getValue();
}
}
}
return null;
}
}
- 大小: 6.2 KB
- 大小: 7.5 KB
分享到:
相关推荐
通过学习和分析这个项目,开发者可以提升VB6.0编程技能,理解网络编程原理,掌握Cookie操作,以及如何将这些知识应用到实际项目中。同时,这也是一个很好的动手实践机会,有助于加深对编程理论的理解。
在"ASP.NET从入门到实践教学视频"中,你将学习到: 1. **基础知识**:首先,视频会介绍ASP.NET的基础概念,包括.NET Framework的架构、ASP.NET的版本历史以及与ASP.NET相关的开发环境,如Visual Studio IDE。此外,...
7. 数据库操作:掌握JDBC(Java Database Connectivity)的基础,以便从数据库中获取数据并在JSP和Servlet中使用。 8. 会话管理:了解会话跟踪技术如Cookie和Session的工作机制。 9. 过滤器和监听器:理解Filter和...
首先,我们从基础开始,理解网络爬虫的基本工作原理。网络爬虫通过模拟浏览器发送HTTP请求到服务器,接收服务器返回的HTML或其他格式的数据,然后解析这些数据提取所需信息。在这个过程中,了解HTTP协议至关重要,...
11. **会话管理**:理解session和cookie的工作原理,以及它们在保持用户状态中的应用。 12. **模板引擎**:可能还会介绍如何使用PHP的模板引擎,如Smarty,以实现更清晰的代码分离。 通过这个CHM版的PHP入门教程,...
通过深入研究这个ASP入门网站源程序,你可以了解到ASP的基本工作原理,以及如何利用它来构建功能齐全的网站。同时,这也将帮助你建立对Web开发流程的整体理解,为进一步学习更复杂的ASP.NET或其他Web技术打下坚实的...
这套源码集包含了丰富的实例,使得理论知识与实践操作相结合,更加直观地理解PHP的工作原理和应用。 PHP是一种广泛使用的开源脚本语言,尤其适用于Web开发,可以嵌入到HTML中进行动态网页的创建。PHP的学习首先从...
**简述拆箱与装箱的原理** - 在C#中,值类型(如int、char等)直接存储实际的值,而引用类型(如class、interface等)存储指向实际值的引用。 - 装箱是指将值类型转换为引用类型的过程,通常是将值类型转换为object...
3. **Cookie操作**:掌握设置和读取cookie的方法,用于存储用户偏好或临时数据。 4. **数据库交互**:学习使用PHP与MySQL等数据库进行连接、查询、插入、更新和删除操作,了解PDO(PHP Data Objects)和mysqli扩展...
6. session与cookie:理解session和cookie在用户状态管理中的作用,学习如何创建、修改、销毁session和cookie。 【PHP高级应用篇】 1. MVC架构:介绍Model-View-Controller模式在PHP开发中的应用,理解各部分职责...
- Cookie与Session:学习如何设置和使用Cookie和Session来管理用户会话。 8. **模板引擎与MVC模式** - 模板引擎:了解如何使用Smarty或其他模板引擎,将业务逻辑和显示逻辑分离。 - MVC模式:探索Model-View-...
### SSO分布式系统单点登录入门到基础到原理实战 #### 一、SSO(Single Sign-On)概念 SSO,即单点登录(Single Sign-On),是一种基于Web的应用程序认证处理方法。用户只需进行一次身份验证即可访问多个应用系统。...
本系列课程的第二部分主要聚焦于ASP.NET 2.0的入门与探索,旨在帮助初学者快速掌握这一技术,并逐步提升技能。 首先,让我们来探讨ASP.NET 2.0的核心概念和特性。ASP.NET 2.0引入了大量改进,例如控件事件模型、...
在IT领域,PHP(Hypertext Preprocessor,超文本预处理器)是...通过实践这些例子,你将能够更好地理解PHP的工作原理,并能编写出自己的PHP程序。在学习过程中,建议结合具体案例深入理解,不断练习,以提升编程技能。
这个"ASP从入门到精通 书中源代码2"的压缩包文件包含了学习ASP编程的重要资源,它提供了书中第二部分的实践代码示例。通过这些源代码,你可以深入理解ASP的工作原理,学习如何构建动态网站。 1. **基础概念**:ASP...
不仅要理解这些漏洞的原理,还要能够实际操作,绕过各种过滤机制。 在掌握了这些基础之后,可能会遇到在实际题目中应用所学知识的困难。此时,扩大知识面至关重要,可以通过复现比赛题目、阅读专业博客文章来学习更...
此外,还将涉及Cookie和Session的使用,用于管理用户状态和实现会话控制。 在高级主题部分,笔记会涉及PHP的模板引擎,如Smarty,以及PHP的框架应用,如Laravel或Yii,这些工具能够加速开发过程并提高代码质量。...
**PHP初学者入门教程** ... ... ...基础语法包括变量声明($var)、...同时,不要忘记实践是检验学习成果的最好方式,多动手做项目,遇到问题积极寻求解答,你会发现PHP的世界充满了无限可能。祝你在Web开发道路上越走越远!
此外,还可能涵盖状态管理,包括视图状态(ViewState)、隐藏字段、cookie以及查询字符串等方法,用于在用户交互过程中保持数据。 通过这前五章的学习,读者将建立起对ASP.NET 2.0的坚实基础,能够创建基本的Web...
ASP,全称Active Server Pages,是微软开发的一种...这些例子对于初学者来说,是了解ASP工作原理和开始实践的好起点。通过深入研究和实践这些例子,可以快速掌握ASP的基本技能,为进一步的Web开发打下坚实的基础。