`
8366
  • 浏览: 813287 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Cookie 的使用

阅读更多

cookie 在js 和 Servlet 中的使用方法:

 

 

js 版cookie使用:

 

 

<!—Cookies,有些人喜欢它们,有些人憎恨它们。但是,很少有人真正知道如何使用它们。现在你可以成为少数人中的成员-可以自傲的Cookie 大师。-->

如果你象作者一样记性不好,那么你可能根本记不住人们的名字。我遇到人时,多半只是点点头,问句“吃了嘛!”,而且期望问候到此为止。如果还需要表示些什么,那么我就得求助于一些狡猾的技巧,好让我能想对方是谁。比如胡扯起一些和对方有关的人,不管他们之间关系多远,只要能避免不记得对方名字的尴尬就好: “你隔壁邻居的侄子的可爱小狗迈菲斯特怎么样?”通过这个方法,我希望能让对方感到,我确实很重视他(她),甚至还记得这些琐事,虽然实际上连名字都忘记了。但是,不是我不重视,而是我的记忆力实在是糟糕,而且要记住的名字又实在太多。如果我能给每个人设置cookies,那么我就不会再犯这种记忆力问题了。

在这篇文章里,我们要学习:

1. 什么是 Cookies?
2. Cookie 的构成
3. 操纵 Cookies
4. Cookie 怪兽

什么是Cookies?

你会问,什么是cookies呢? cookie 是浏览器保存在用户计算机上的少量数据。它与特定的WEB页或WEB站点关联起来,自动地在WEB浏览器和WEB服务器之间传递。

比如,如果你运行的是Windows操作系统,使用Internet Explorer上网,那么你会发现在你的“Windows”目录下面有一个子目录,叫做“Temporary Internet Files”。如果你有空看看这个目录,就会发现里面有一些文件,文件名称看起来就象电子邮件地址。比如在我机器上的这个目录里,就有 “jim@support.microsoft.com”这样的文件。这是一个cookie 文件,这个文件从哪来呢?猜一猜,它来自微软的支持站点。顺便说一句,这不是我的电子邮件地址,特此澄清。

对于管理细小的、不重要的、不想保存在中央数据库里的细节信息,Cookies 是个很不错的方案。(这不是说大家的名字不重要。)比如,目前网站上不断增长的自定义服务,可以为每个用户定制他们要看的内容。如果你设计的就是这样一个站点,那么你怎么来管理这样的信息:一个用户喜欢绿色的菜单条,而另一个喜欢红色的。确实是个累人的问题。不过,这样的信息,可以很安全地记录到cookie,并保存在用户的计算机上,而你自己的数据库空间可以留给更长久更有意义的数据。

FYI: Cookies 对于安全用途,通常很有用。我不想在此就这一问题过于深入,只是提供一个示例,可以看到如何使用在一段时间之后过期的cookies来保证站点安全:

1. 使用用户名和口令,通过 SSL 登录。
2. 在服务器的数据库里检查用户名和口令。如果登录成功,建立一个当前时间标签的消息摘要 (比如 MD5) ,并把它保存在cookie和服务器数据库里。把用户的登录时间保存在服务器数据库里面的用户记录里。
3. 在进行每个安全事务时(用户处于登录状态的任何事务),把cookie的消息摘要和保存在服务器数据库里的摘要进行比较,如果比较失败,就把用户引导到登录界面。
4. 如果第3步检查通过,那么检查当前时间和登录时间之音经过的时间是否超过允许的时间长度。如果用户已经超时,那么就把用户引到登录界面。
5. 如果第3步和第4步都通过了,那么把登录时间重新设置成当前时间,允许事务发生。那些需要你登录的安全站点,可能多数使用的都是和这里介绍的类似的方法。
Cookie的构成

Cookies最初设计时,是为了CGI编程。但是,我们也可以使用Javascript脚本来操纵cookies。在本文里,我们将演示如何使用Javascript脚本来操纵cookies。(如果有需求,我可能会在以后的文章里介绍如何使用Perl进行cookie管理。但是如果实在等不得,那么我现在就教你一手:仔细看看CGI.pm。在这个CGI包里有一个cookie()函数,可以用它建立cookie。但是,还是让我们先来介绍cookies的本质。

在Javascript脚本里,一个cookie 实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、 domain域、以及 secure安全。

Expires – 过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。

Path – 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果http://www.zdnet.com/devhead/index.html 建立了一个cookie,那么在http://www.zdnet.com/devhead/目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在http://www.zdnet.com/devhead/stories/articles 里的任何页面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http://www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html设置的cookes,该怎么办?这时,我们要把cookies 的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子:如果想让 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共享cookies,就要把path设成“/devhead”。

Domain – 域。指定关联的WEB服务器或域。值是域名,比如zdnet.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies,该怎么办? 我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。FYI:不能把cookies域属性设置成与设置它的服务器的所在域不同的值。

Secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。




操纵Cookies

请记住,cookie就是文档的一个字符串属性。要保存cookie,只要建立一个字符串,格式是name=<value>(名称=值),然后把文档的 document.cookie 设置成与它相等即可。比如,假设想保存表单接收到的用户名,那么代码看起来就象这样:

document.cookie = "username" + escape(form.username.value);

在这里,使用 escape() 函数非常重要,因为cookie值里可能包含分号、逗号或者空格。这就是说,在读取cookie值时,必须使用对应的unescape()函数给值解码。

我们当然还得介绍cookie的四个属性。这些属性用下面的格式加到字符串值后面:

name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]

名称=<值>[; expires=<日期>][; domain=<域>][; path=<路径>][; 安全]

<value>, <date>, <domain> 和 <path> 应当用对应的值替换。<date> 应当使用GMT格式,可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。方括号代表这项是可选的。比如在 [; secure]两边的方括号代表要想把cookie设置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面,那么这个cookie就是不安全的。不要把尖括号<> 和方括号[] 加到cookie里(除非它们是某些值的内容)。设置属性时,不限属性,可以用任何顺序设置。

下面是一个例子,在这个例子里,cookie "username" 被设置成在15分钟之后过期,可以被服务器上的所有目录访问,可以被"mydomain.com"域里的所有服务器访问,安全状态为安全。

// Date() 的构造器设置以毫秒为单位
// .getTime() 方法返回时间,单位为毫秒
// 所以要设置15分钟到期,要用60000毫秒乘15分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="
+ expiration.toGMTString() + "; path=" + "/" + "; _
domain=" + "mydomain.com" + "; secure";

读取cookies值有点象个小把戏,因为你一次就得到了属于当前文档的所有cookies。

// 下面这个语句读取了属于当前文档的所有cookies
var allcookies = document.cookie;

现在,我们得解析allcookies变量里的不同cookies,找到感兴趣的指定cookie。这个工作很简单,因为我们可以利用Javascript语言提供的扩展字符串支持。

如果我们对前面分配的cookie "username" 感兴趣,可以用下面的脚本来读取它的值。

// 我们定义一个函数,用来读取特定的cookie值。
function getCookie(cookie_name)

var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);

// 如果找到了索引,就代表cookie存在,
// 反之,就说明不存在。
if (cookie_pos != -1)

// 把cookie_pos放在值的开始,只要给值加1即可。
cookie_pos += cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);

if (cookie_end == -1)

cookie_end = allcookies.length;


var value = unescape(allcookies.substring(cookie_pos, cookie_end));


return value;


// 调用函数
var cookie_val = getCookie("username");

上面例程里的 cookie_val 变量可以用来生成动态内容,或者发送给服务器端CGI脚本进行处理。现在你知道了使用Javascript脚本操纵cookies的基本方法。但是,如果你跟我一样,那么我们要做的第一件事,就是建立一些接口函数,把cookies处理上的麻烦隐藏起来。不过,在你开始编程之前,稍候片刻。这些工作,早就有人替你做好了。你要做的,只是到哪去找这些接口函数而已。

比如,在David Flangan的Javascript: The Definitive Guide 3rd Ed.这本书里,可以找到很好的cookie应用类。你也可以在Oreilly的WEB站点上找到这本书里的例子。本文最后的链接列表里,有一些访问这些cookie示例的直接链接。



Cookies 怪兽

因为某些原因Cookies 的名声很不好。许多人利用cookies做一些卑鄙的事情,比如流量分析、点击跟踪。Cookies 也不是非常安全,特别是没有secure属性的cookies。不过,即使你用了安全的cookies,如果你和别人共用计算机,比如在网吧,那么别人就可以窥探计算机硬盘上未加密保存的cookie文件,也就有可能窃取你的敏感信息。所以,如果你是一个WEB开发人员,那么你要认真考虑这些问题。不要滥用cookies。不要把用户可能认为是敏感的数据保存在cookies里。如果把用户的社会保险号、信用卡号等保存在cookie里,等于把这些敏感信息放在窗户纸下,无异于把用户投到极大危险之中。一个好的原则是,如果你不想陌生人了解你的这些信息,那就不要把它们保存在cookies里。

另外,cookies还有一些实际的限制。Cookies保留在计算机上,不跟着用户走。如果用户想换计算机,那么新计算机无法得到原来的cookie。甚至用户在同一台计算机上使用不同浏览器,也得不到原来的cookie:Netscape 不能读取Internet Explorer 的cookies。

还有,用户也不愿意接受cookies。所以不要以为所有的浏览器都能接受你发出的cookies。如果浏览器不接受cookies,你要保证自己的WEB站点不致因此而崩溃或中断。

另外WEB 浏览器能保留的cookies不一定能超过300个。也没有标准规定浏览器什么时候、怎么样作废cookies。所以达到限制时,浏览器能够有效地随机删除cookies。浏览器保留的来自一个WEB服务器上的cookies,不超过20个,每个cookie的数据(包括名称和值),不超过4K字节。(不过,本文里的cookie尺寸没问题,它只占了12 K字节,保存在3个3 cookies里。)

简而言之,注意保持cookie简单。不要依赖cookies的存在,不要在每个cookie里保存太多信息。不要保存太多的cookes。但是,抛除这些限制,在技巧高超的WEB管理员手里,cookie的概念是一个有用的工具。

外部链接
每个 Javascript 程序员都应当有一份Javascript: David Flanagan 的The Definitive Guide。 这本书里找到cookie 类例程可以帮助你把不止一个变量编码到单一的cookie,克服掉“每个WEB服务器20 个cookies的限制”。请点击这个链接下载该例程,ftp://ftp.oreilly.com/pub/examples/nutshell/javascript/

 

 

servlet 版cookie使用:

 

Cookie的使用

 

一、cookie的作用

在我们平常写的B/S程序中,会经常用到cookie,主要有以下一些作用:

1、 记录用户名和密码

以及该用户需要保存的一些信息,如购物购站,使用cookie,可以让用户自动登录到站点等。

2、 定制站点

可以使用cookie来记录用户的偏好。

3、 定向广告

可以使用cookie来记录用记经常访问的主题,并向他们显示与这些主题相关的广告。

 

二、向客户程序发送cookie

1、 创建cookie对象

Cookie c = new Cookie(“userId”,”landril”);

2、 设置最大时效,默认该cookie是存储在浏览器的内在中,用户关闭浏览器则被删除,下面的方法是将cookie存储在硬盘上。

c.setMaxAge(60*60*24);//一天,如果设置为0则是删除该cookie

3、 cookie放入到HTTP响应报头,可以使用HttpServletResponseaddCookie方法,此方法不修改之前指定的Set-Cookie报头,而是创建新的报头。

response.addCookie(c);

       注意:设置cookie的步骤为创建cookie对象,设置最大时效,将cookie放入响应报头,即发送到客户程序,记住一定要将cookie发送到客户程序

 

三、从客户端读取cookie

1、 调用HttpServletRequestgetCookies得到一个Cookie对象的数组

2、 对数组进行循环,调用cookiegetName方法,获取具体的cookie的值

Cookie[] cookies = request.getCookies();

if(cookies != null){

for(int i=0;i<cookies.length;i++){

        Cookie c = cookies[i];

        if(“userId”.equals(c.getName())){

        System.out.println(c.getValue());

}

}

}

 

四、cookie的常用方法

1、 setComment()/getComment():指定或查找与该cookie相关的注释

2、 setDomain()/getDomain():设置或读取该cookie适用的域

3、 setMaxAge()/getMaxAge():操作cookie保留的时间,多长时间后过期

4、 getName():读取cookie的名称

5、 setPath()/getPath():设置或取得cookie适用的路径

cookie.setPath(“/”);指定服务器的所有页面都应该收到该cookie

6、 setSource()/getSource():指定cookie是否只能通过加密连接(SSL

默认false,表示cookie适用所有连接

7、 setValue()/getValue():指定或获取cookie的值

 

五、使用cookie

 

1RepeatServlet.java

public class RepeatServlet extends HttpServlet {

 

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

        boolean newa = true;

        Cookie[] cookies = request.getCookies();

        if(cookies != null){

           for (int i = 0; i < cookies.length; i++) {

               Cookie c = cookies[i];

               if ((c.getName().equals("repeat")) && (c.getValue().equals("true"))) {

                  newa = false;

                   break;

               }

           }

       }

      

        String title;

       if (newa) {

           Cookie rtn = new Cookie("repeat"," true");

           rtn.setMaxAge(60*60*24*365);

           response.addCookie(rtn);

           title = "First Welcome";

       } else {

           title = "Welcom Back";

       }

      

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html><body><h3>");

        out.println(title);

        out.println("</h3></body></html>");

    }

 

    public void doPose(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

        doGet(request,response);

    }

}

 

2CookieUtil.java

public class CookieUtil{

 

    public static String getValue(HttpServletRequest request,String cName,String value){

        Cookie[] cookies = request.getCookies();

        if(cookies != null){

           for (int i = 0; i < cookies.length; i++) {

               Cookie cookie = cookies[i];

               if (cName.equals(cookie.getName())) {

                   return cookie.getValue();

               }

           }

       }

        return value;

    }

   

    public static Cookie getCookie(HttpServletRequest request,String cName){

        Cookie[] cookies = request.getCookies();

        if(cookies != null){

           for (int i = 0; i < cookies.length; i++) {

               Cookie cookie = cookies[i];

               if (cName.equals(cookie.getName())) {

                   return cookie;

               }

           }

       }

        return null;

    }

}

 

3AccessCountServle.java 记录访问数

public class AccessCountServlet extends HttpServlet {

 

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

      

        String acount = CookieUtil.getValue(request, "acc", "1");

       int count = Integer.parseInt(acount);

        Cookie cookie = new Cookie("acc",String.valueOf(count+1));

        cookie.setMaxAge(60*60*24*365);

        response.addCookie(cookie);

      

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html><body>Hello,the number is<h3>");

        out.println(count);

        out.println("</h3></body></html>");

    }

   

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

        doGet(request,response);

    }

}

 

分享到:
评论

相关推荐

    cookie使用工具类

    Cookie使用工具类是程序员为了方便地管理、创建和操作Cookie而编写的辅助类。这些工具类通常封装了与Cookie相关的复杂操作,使得代码更加简洁易读。本文将深入探讨Cookie的基本概念、用途以及如何使用`CookieUtil`...

    cookie使用

    ### Cookie使用详解 #### 一、什么是Cookies? Cookies是一种由Netscape开发的工具,用于在用户的硬盘上存储信息,以便Web服务器能够识别特定的用户。由于HTTP协议本身是无状态的,即每次请求和响应都是独立的,...

    jquery.cookie使用方法(中文详细版)

    ### jQuery.cookie 使用方法详解 #### 一、简介 jQuery.cookie 是一个轻量级的 jQuery 插件,专门用于处理浏览器中的 Cookie。它提供了一种简便的方式来读取、写入及删除 Cookie,使得开发者无需手动编写复杂的 ...

    【ASP.NET编程知识】asp.net中的cookie使用介绍.docx

    ASP.NET 中的 Cookie 使用介绍 ASP.NET 是一个基于Microsoft .NET Framework 的 Web 应用程序框架,它提供了一种强大和灵活的方式来构建Web 应用程序。在 ASP.NET 中,Cookie 是一种常用的会话跟踪机制,允许开发者...

    cookie使用,localStorage使用

    总结来说,Cookie适合存储少量、短期、需要在服务器端访问的数据,而localStorage则适用于存储大量、长期、仅客户端使用的数据。在实际应用中,开发者可以根据需求选择合适的存储方案。对于学习和实践,"CookieTest...

    cookie使用方法

    cookie使用方法

    asp.net中的cookie使用例

    本文将深入探讨如何在ASP.NET中使用Cookie来实现题目所述的功能。 首先,我们需要理解Cookie的工作原理。Cookie是由服务器发送到浏览器的一小段文本信息,浏览器在后续的请求中会自动将其回传给服务器。它们通常...

    IIS环境下和阿帕奇环境下 js的Cookie使用方法

    这篇教程将深入探讨在IIS(Internet Information Services)和Apache两种不同的Web服务器环境下,如何使用JavaScript来操作Cookie。 **一、Cookie的基本概念** Cookie是由服务器端创建,并发送到客户端浏览器的一...

    php session和cookie使用说明

    1.1.2 使用`header()`设置Cookie ```php header("Set-Cookie: name=$value[path=$path[;domain=xxx.com[; ]]"); ``` 这里的参数与`setcookie()`函数相同。 1.2 读取Cookie 使用PHP内置的超全局变量`$_COOKIE`可直接...

    cookie使用方法集

    本文将深入探讨JavaScript和JSP中如何操作Cookie,以及涉及的超时设置和跨文件夹使用。 一、Cookie的基本概念 Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,当客户端再次请求同一服务器时,会将...

    桂林老兵cookie欺骗工具

    桂林老兵Cookie欺骗工具是一款在IT安全领域中被广泛讨论...总的来说,桂林老兵Cookie欺骗工具为网络安全专业人员提供了一个实验和学习Cookie欺骗技术的平台,但使用时应谨慎,合理运用这些知识来提升网络环境的安全性。

    jscript中使用cookie

    **JavaScript Cookie 使用详解** 在Web开发中,JavaScript的全局变量在不同页面间通常是无法共享的,但是有一种机制——Cookie,可以实现跨页面的全局数据存储。Cookie是由浏览器提供的功能,它允许JavaScript通过`...

    java 操作cookie

    Java 操作 Cookie Java 操作 Cookie 是一种常用的 Web 开发技术,用于在服务器端和客户端之间交换数据。Cookie 是一种小文本文件,存储在客户端浏览器中,用于记录用户的行为和偏好。下面我们将详细介绍 Java 操作 ...

    cookie的使用,实用的demo

    下面是一个简单的Cookie使用示例: ```jsp ; charset=UTF-8" %&gt; // 创建Cookie对象 Cookie cookie = new Cookie("username", "John Doe"); // 设置Cookie的生命周期,单位为秒 cookie.setMaxAge(3600); // 1...

    jquery 设置cookie、删除cookie、获取cookie

    使用 `$.cookie()` 方法可以轻松地设置 Cookie。此方法接受多个参数来定制 Cookie 的行为: - **第一个参数**:表示 Cookie 的名称。 - **第二个参数**:表示 Cookie 的值。 - **第三个参数**:可选对象,用于...

    java中cookie的使用教程

    在Java编程语言中,Cookie是一种小型文本文件,用于在客户端和服务器之间传递信息,特别是保持用户状态和会话。本文将深入讲解Java中Cookie的使用方法,...在实践中不断探索,你将更加熟练地掌握Java中的Cookie使用。

    jquery-cookie

    使用jQuery Cookie创建一个Cookie非常直观,只需调用`.cookie()`方法并传入两个参数:Cookie的名称和值。例如,创建一个名为"user"的Cookie: ```javascript $.cookie('user', 'John Doe'); ``` ### 3. 读取Cookie...

    PHP的Cookie技术介绍

    在探讨PHP中的Cookie使用之前,我们首先需要明确什么是Cookie。Cookie是一种让服务器能够存储并稍后读取的小型文本文件,通常用于跟踪用户状态。它是在1994年由Netscape Navigator的开发者Lou Montulli发明的,并...

    JQuery对cookie操作

    新建Cookie使用`jQuery.cookie`方法,接受两个参数:cookie的名称和值。例如,创建一个名为`myCookie`的Cookie: ```javascript $.cookie('myCookie', 'cookieValue'); ``` 还可以添加其他选项,如有效期(days)...

Global site tag (gtag.js) - Google Analytics