第八章 cookie管理
8.1
• 思想
– servlet发送简单的名称和值到客户程序。
– 客户程序在访问同一站点(或同一域,依cookie设置
的不同而定)时将名称和值原样返回。
• cookie的典型应用
– 在电子商务会话中标识用户
• 针对这项任务servlet拥有专门的高层API
– 避免存储用户名和密码
– 对站点进行定制
– 定向广告
8.2 与cookie相关的一些问题
• 问题在于隐私,不是安全。
– 服务器能够记住您之前的动作。
– 如果您给出自己的个人信息,服务器能够将这些信息
与您之前的动作关联起来。
– 多个服务器能够通过提供协作服务的第三方,如
doubleclick.net,共享cookie信息。
– 设计欠考虑的网站直接将敏感的信息,如信用卡号码
,存储在cookie中。
– JavaScript的bug能够使敌对网站窃取cookie (老浏览器)
• servlet作者应该遵守下面这些法则
– 如果cookie对于您的任务并非至关重要,则要避免在
cookie被禁用时servlet完全不能工作。
– 不要将敏感的信息存储在cookie中。
8.4 cookie 的发送和接收
1.向客户程序发送cookie
• 创建Cookie对象。
– 调用Cookie的构造函数,给出cookie的名称和cookie的
值,二者都是字符串。
Cookie c = new Cookie("userID", "a1234");
• 设置最大时效。
– 如果要告诉浏览器将cookie存储到磁盘上,而非仅仅
保存在内存中,使用setMaxAge (参数为秒数)。
c.setMaxAge(60*60*24*7); // One week
写道
创建cookie对象后,将cookie发送到客户程序之前,一般应该调用setMaxAge方法。
• 将Cookie放入到HTTP响应中
– 使用response.addCookie。
– 如果忘记这一步,那么不会有任何cookie被发送到浏
览器!
response.addCookie(c);
创建和操作Cookie对象对客户应用程序没有任何影响。必须显式地调用response.setCookie将cookie发送到客户端。
sample
Cookie userCookie = new Cookie("user", "uid1234");
userCookie.setMaxAge(60*60*24*365); // Store cookie for 1 year
response.addCookie(userCookie);
2.从客户端读取cookie
• 调用request.getCookies
– 这会得到Cookie对象组成的数组。
• 在这个数组中循环,调用每个对象的getName,直到找
到想要的cookie为止。
– 根据应用程序的具体情况使用这个值(getValue)。
String cookieName = "userID";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for(int i=0; i<cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())) {
doSomethingWith(cookie.getValue());
}
}
}
8.5 使用cookie检测初访者
错误方法:
Cookie[] cookies = request.getCookies();
if (cookies == null) {
doStuffForNewbie(); // Correct.
} else {
doStuffForReturnVisitor(); // Incorrect.
}
the right way:
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Servlet that says "Welcome aboard" to first-time
* visitors and "Welcome back" to repeat visitors.
* Also see RepeatVisitor2 for variation that uses
* cookie utilities from later in this chapter.
*/
public class RepeatVisitor extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
boolean newbie = true;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for(int i=0; i<cookies.length; i++) {
Cookie c = cookies[i];
if ((c.getName().equals("repeatVisitor")) &&
// Could omit test and treat cookie name as a flag
(c.getValue().equals("yes"))) {
newbie = false;
break;
}
}
}
String title;
if (newbie) {
Cookie returnVisitorCookie =
new Cookie("repeatVisitor", "yes");
returnVisitorCookie.setMaxAge(60*60*24*365); // 1 year
response.addCookie(returnVisitorCookie);
title = "Welcome Aboard";
} else {
title = "Welcome Back";
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String docType =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">\n";
out.println(docType +
"<HTML>\n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
"</BODY></HTML>");
}
}
分享到:
相关推荐
Servlet与JSP核心编程:综合介绍Servlet与JSP
《Servlet与JSP核心编程(第二版)》是一本针对Java Web开发的权威指南,主要聚焦于Servlet和JSP这两个核心技术。Servlet是Java平台上的服务器端组件,用于处理HTTP请求,而JSP(JavaServer Pages)则是一种动态网页...
《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和...
《Servlet与JSP核心编程(第2卷 第2版)》这本书深入讲解了这两项技术,帮助开发者理解并掌握其核心概念、用法以及最佳实践。 1. **Servlet概述** - Servlet是Java平台上的一个接口,它定义了服务器端程序如何响应...
Servlet与JSP核心编程第二版 PDF文件 高清,内容通俗易懂.
《Servlet与JSP核心编程第二版》这本书深入浅出地讲解了这两个技术,涵盖了从基础到高级的主题,包括但不限于: 1. **Servlet生命周期**:Servlet的创建、初始化、服务和销毁过程,以及如何通过配置`web.xml`文件或...
servlet与jsp核心编程,还是免费给大家下载,需要的可以下来看看
### Servlet与JSP核心编程第二版5:关键技术与实践解析 #### 一、Servlet概述与核心技术 ##### 1.1 Servlet简介 Servlet 是 Java 平台的一种服务器端技术,用于扩展应用程序的功能。它是一个轻量级的应用程序组件...
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
### Servlet与JSP核心编程知识点概述 #### 一、Servlet基础概念 - **Servlet定义**:Servlet是一种Java程序,用于扩展服务器的功能。它提供了一种方法来创建动态Web页面,并可以处理客户端请求。 - **Servlet生命...
Servlet API是Java Web开发的核心组件,它定义了服务器端Java应用程序(Servlet)与Web服务器之间的接口规范。Servlet API提供了处理HTTP请求和响应的方法,允许开发人员创建能够接收和处理来自客户端(如浏览器)的...
本书由Marty Hall,Larry Brown著 张学良译 清华大学出版社出版 原书有47M由于上传文件大小限制分为3部分,本人不是黑人,仅仅在最后一个部分才收取4分资源分
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
`javax.servlet` 和 `jsp-api` 是Java服务器端编程的重要组成部分,主要用于构建动态Web应用程序。这两个API是Java Servlet和JavaServer Pages(JSP)技术的核心接口和类库,由Java Community Process (JCP)制定并由...
本书《Servlet与JSP核心编程(第二版)卷二》的源代码集合,为读者提供了丰富的实践素材,有助于深入理解这两种技术的内部工作原理。 Servlet是一种Java API,用于扩展服务器的功能,处理HTTP请求并生成响应。它...
综上所述,《Servlet与JSP核心编程(第1卷 第2版)》这本书很可能是深入探讨了Servlet与JSP的基础理论、核心技术及其实战应用的一本书籍。对于想要学习或深入理解这些技术的人来说,这本书将是非常有价值的资源。
《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。
### Servlet与JSP核心编程第二版知识点概览 #### 一、Servlet基础知识 - **Servlet概念**:Servlet是一种运行在服务器端的小程序,主要用于处理客户端请求并生成动态Web页面或数据。Servlet是Java Web开发的基础...