`
liangjian103
  • 浏览: 177490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cookies的详细使用说明

 
阅读更多

一.什么是cookies? 

  大家都知道,浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭 与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个 缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过 浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于 C://windows//cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用 户。

  cookies给网站和用户带来的好处非常多:

  1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
  2、Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告

  3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点

  4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务

  在JSP中,我们也可以使用Cookie,来编写一些功能强大的应用程序。

  下面,我想介绍一下如何用JSP创建和处理Cookie。

  二.如何创建Cookie 

   import="javax.servlet.http.Cookie"

  说了这么多,大家一定很想知道JSP是如何创建cookie了。JSP是使用如下的语法格式来创建cookie的:

  Cookie cookie_name =new Cookie("Parameter","Value");

  例如:

Cookie username_Cookie =new Cookie("username","waynezheng"); 
response.addCookie(username_Cookie);

  解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来创建Cookie,然后Cookie可以通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头,

本例中Cookie对象有两个字符串参数:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符:@ : ;? , " / [ ] ( ) = 

  处理Cookie的属性

  看到这里,有的朋友又要问了:我光知道如何创建Cookie有什么用呀?是呀,光知道如何创建Cookie而不知道怎么使用是不够的。

在JSP中,程序是通过cookie.setXXX设置各种属性,用cookie.getXXX读出cookie的属性,现在把Cookie的主要属性,及其方法列于下,供大家参考:

   

类型

方法名

方法解释

String

getComment()

返回cookie中注释,如果没有注释的话将返回空值.

String

getDomain()

返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)

int

getMaxAge()

返回Cookie过期之前的最大时间,以秒计算。

String

getName()

返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。

String

getPath()

返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。

boolean

getSecure()

如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。

String

getValue()

返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。

int

getVersion()

返回Cookie所遵从的协议版本。

void

setComment(String purpose)

设置cookie中注释。

void

setDomain(String pattern)

设置cookie中Cookie适用的域名

void

setMaxAge(int expiry)

以秒计算,设置Cookie过期时间。

void

setPath(String uri)

指定Cookie适用的路径。

void

setSecure(boolean flag)

指出浏览器使用的安全协议,例如HTTPS或SSL。

void

setValue(String newValue)

cookie创建后设置一个新的值。

void

setVersion(int v)

设置Cookie所遵从的协议版本。   


  读取客户端的Cookie 

  在Cookie发送到客户端前,先要创建一个Cookie,然后用addCookie方法发送一个HTTP Header。JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。你只需要用循环访问该数组的各个元素,调用getName方法检查各个Cookie的名字,直至找到目标Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值。
  例如
  <%
   //从提交的HTML表单中获取,用户名
   String userName=request.getParameter("username");

   //以"username", userName 值/对 创建一个Cookie
   Cookie theUsername=new Cookie("username",userName);

   response.addCookie(theUsername);
  %>
  ..............
  <%
   Cookie myCookie[]=request.getCookies();//创建一个Cookie对象数组

   for(int n=0;n=cookie.length-1;i++);//设立一个循环,来访问Cookie对象数组的每一个元素

   Cookie newCookie= myCookie[n];

   if(newCookie.getName().equals("username")); //判断元素的值是否为username中的值
    {%>
     你好,<%=newCookie.getValue()%>!//如果找到后,向他问好
    <%}
  %>

  设置Cookie的存在时间,及删除Cookie

   在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。如:  
  <%
   Cookie deleteNewCookie=new Cookie("newcookie",null);
   deleteNewCookie.setMaxAge(0); //删除该Cookie
   deleteNewCookie.setPath("/"); 
   response.addCookie(deleteNewCookie);
  %>  

一、 前言 

说起来,Cookie应该是一种应用较久的技术了。早在HTML刚刚出现的时候,在每个独立的页面之间没有办法记录和标识不同的用户。后来人们就发明了 Cookie技术,当用户访问网页时,它能够在访问者的机器上创立一个文件,我们把它叫作Cookie,写一段内容进去,来标识不同的用户。如果下次用户 再访问这个网页的时候,它又能够读出这个文件里面的内容,这样网页就知道上次这个用户已经访问过该网页了。

虽然现在网页的制作技术比起几年以前已经发展了许多。不过有些时候,Cookie还是能够帮我们很多忙的。接下来,我们就来看看,如何在写JSP文件的时候,用JSP操作Cookie。
=======================================

二、 保存写入Cookie

其实用JSP操作Cookie是非常简单的,我们来看下面一段JSP程序:

........(中间略)

//保存写入Cookie 
<% 
String cookieName="Sender"; 
Cookie cookie=new Cookie(cookieName, "Test_Content"); 
cookie.setMaxAge(10);   //存活期为10秒
response.addCookie(cookie); 
%> 
........(其他内容)


这样我们就设置了一个Cookie,很简单吧?

我们来仔细研究一下这段代码:

  Cookie cookie=new Cookie(cookieName, "Test_Content");

这一行建立了一个Cookie对象,初始化有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容。也就是我们希望网页在用户的机器上标识的文件内容。

接下来一行:cookie.setMaxAge(10),调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活 期为10秒。一个Cookie在用户的硬盘里面存在的时间并不是无限期的,在建立Cookie对象的时候,我们必须制定Cookie的存活期,超过了这个 存活期后,Cookie文件就不再起作用,会被用户的浏览器自行删除。如果我们希望用户在下次访问这个页面的时候,Cookie文件仍然有效而且可以被网 页读出来的话,我们可以将Cookie的存活期设得稍微长一些。比如cookie.setMaxAge(365*24*60*60)可以让Cookie文件在一年内有效。 

三、 读取出Cookie

Cookie文件创建好后,自然还需要我们把它读出来,否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie。

........(中间略)

Name value

<% 
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面
Cookie sCookie=null; 
String svalue=null; 
String sname=null; 

for(int i=0;i<cookies.length-1;i++{    //用一个循环语句遍历刚才建立的Cookie对象数组
sCookie=cookies[i];   //取出数组中的一个Cookie对象

sname=sCookie.getName(); //取得这个Cookie的名字
svalue=sCookie.getValue(); //取得这个Cookie的内容
%>

<% 

%>

  name    value
<%=name%> <%=svalue%>

........(其他内容)

这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie,也就是仍然在存活期内的Cookie文件。并用表格的形式列出每个Cookie的名字和内容。

我们来逐行分析一下这段代码: 
Cookie cookies[]=request.getCookies() 我们用request.getCookies()读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面。 
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组,我们用sCookie=cookies[i]取出数组中的一个Cookie对象,然后我们 用sCookie.getValue()和sCookie.getName()两个方法来取得这个Cookie的名字和内容。 

通过将取出来的Cookie的名字和内容放在字符串变量中,我们就能对其进行各种操作了。在上面的例子里,可通过循环语句的遍历,将所有Cookie放在一张表格中进行显示。 
=======================================

四、 需要注意的一些问题

通过上面两个简单的例子,可以看到,用JSP进行Cookie的操作,是非常简单的。不过我们在实际操作中还要注意一些问题:

1. Cookie的兼容性问题

Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目 前还不被Javax.servlet.http.Cookie包所支持。

2. Cookie的内容

同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容。这也就 是为什么我们在例子中设定Cookie的内容为"Test_Content"的原因。

虽然在Cookie Version 1规定中放宽了限制,可以使用这些字符,但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持,因而为保险起见,我们应该在Cookie的内容中尽量避免使用这些字符。(

 

 3.cookie的删除

 

cookie为什么删除不了,所以写了给小总结,希望对用cookie的各位兄弟有帮助 
对于cookie,最主要的当然是读取和设置了,下面分两方面说明
一、设置 
Cookie是通过HttpServletResponseaddCookie方法加入到Set-Cookie应答头中的 
例如: 
Cookie userCookie = new Cookie("user", "admin"); 
response.addCookie(userCookie); 
和设置有关系的还有以下两个重要方法 
1.setMaxAge 
设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,而且这些Cookie不会保存到磁盘上。 
注意:删除cookie就是通过该方法实现的。将要删除的cookie的过期之前的时间指定为0就可以达到删除该cookie的目的。 
2.setPath 
设置Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面(JSP页面或者Servlet的映射)所在目录及其子目录下的所有页面。 
注意: 
A:所有的cookie都是有路径的 
B:该方法设置的路径为客户端路径,即“/”代表服务器根目录,而不是WEB应用根目录 
C:该方法设置路径时,“/myWeb/”“/myWeb”是不同的,要特别注意;前者可以关联到服务器的myWeb目录下,而或者则不可以。 
D: 该方法设置路径时,没有相对目录可言,即不论在哪个目录下设置setPath(“/myWeb/”),该cookie都将关联到服务器的myWeb目录下 (setPath(“/myWeb”)则不可以),而不是当前目录的myWeb的子目录下;同样,设置setPath(“myWeb/”)和 setPath(“myWeb”)也不能关联到当前目录的myWeb的子目录下 
这里有个奇怪的例子,就是在一个web应用下设置的cookie可以在另一个web应用下获得(两个web应用在同一个服务器下) 
目录结构:在服务器根目录上有web1web2两个目录,在web1下有setcookie.jspgetcookie.jsp、在web2下有getcookie.jsp 
web1下的setcookie.jsp 

web1下的getcookie.jsp 

web2下的getcookie.jsp 

先 访问web1下的setcookie.jsp,然后分别访问web1web2下面的getcookie.jsp文件,你会发现奇怪的现象,web1下的 getcookie.jspuser为空而web2下的getcookie.jspuser却有值,这就实现了从一个web应用下设置的cookie 在另一个web应用下获得。 
大多数人删除cookie不成功都是因为目录原因。一个典型的原因是在某一个目录中设置了cookie(没有调用setPath方法)却在另一个目录中删除该cookie(其实是调用setMaxAge方法) 

二、读取 
从 客户端读取Cookie时调用的是HttpServletRequestgetCookies方法。该方法返回一个与HTTP请求头中的内容对应的 Cookie对象数组。得到这个数组之后,一般是用循环访问其中的各个元素,调用getName检查各个Cookie的名字,直至找到目标Cookie。 然后对这个目标Cookie调用getValue,根据获得的结果进行其他处理。 
注意:若JSPServlet所在目录(Servlet为其映射目录)的父目录中有同名cookie,则request.getCookie()方法得到的Cookie数组中保存的是其父目录中的cookie的信息;

分享到:
评论

相关推荐

    IE COOKIES查看工具及说明教程

    **IE COOKIES查看工具及说明教程** 在互联网浏览过程中,网站为了记住用户的信息和偏好,通常会使用一种名为"Cookies"的技术。这些小型文本文件存储在用户的计算机上,为用户提供个性化的体验,如自动登录、保存...

    如何打开网页的cookies

    本篇文章将详细介绍如何在IE浏览器中开启对网页Cookies的接受,以便能够正常浏览那些依赖Cookies的网站。 首先,你需要知道为什么有时会遇到无法打开Cookies的情况。这通常是因为浏览器的隐私设置过高,或者用户已...

    C#+Cookies防止重复操作代码

    本篇将详细解析如何利用C#和Cookies来实现这一功能。 首先,我们来看标题中的核心概念:C#防止重复操作和C#+Cookies防止重复操作。在C#的Web应用中,通常使用ASP.NET框架。当用户进行投票、点赞或评论等操作时,...

    IE Cookies查看工具

    5. 阅读文档:`readme.txt`文件通常包含关于工具的使用说明和注意事项,建议在使用前仔细阅读。 **四、安全与隐私** 虽然IE Cookies查看工具提供了一种便捷的管理方式,但用户仍需谨慎对待Cookie的使用。不要随意...

    cookies 查看器 ie friefox chrome

    5. **查看和管理Cookies**:通过浏览器的设置菜单,用户通常可以直接查看和管理cookies,但使用专门的cookies查看器可以提供更详细的控制和便捷的操作。 6. **隐私设置**:浏览器通常允许用户调整对cookies的接受...

    java+http+操作cookies源码整理

    "下载及使用说明.txt"文件应包含详细的步骤和注意事项,帮助你理解和使用这些源码。 通过学习和实践这些Java HTTP Cookies操作,你将能够更好地处理用户会话和状态管理,为Web应用程序提供更加流畅的用户体验。记住...

    易语言取COOKIES目录

    源码中的具体实现会详细说明这些步骤,包括错误处理和异常处理机制。 学习这部分源码,可以加深对易语言操作文件和系统API的理解,同时也能掌握获取和处理Cookies信息的基本方法。对于想要涉足网络编程或者网页自动...

    Cookies Manager管理工具V1.1汉化绿色版.rar

    8. **补丁说明**:补丁说明.txt文件可能包含了关于程序更新、修复或优化的详细信息,帮助用户了解新版本的变化。 9. **建站无忧jz5u.com说明.txt**:这个文件可能是来自建站无忧jz5u.com的额外说明,可能包含该工具...

    黑鹰cookies查看

    4. 黑鹰说明.txt - 这是工具的说明文档,很可能提供了关于如何使用“黑鹰cookies查看”功能的详细步骤和指南。 5. 3800hk.com.url - 这是一个网址快捷方式,可能指向与“黑鹰”工具或3800HK相关的一个网站,用户可以...

    cookieviewer-查看cookies

    2. **license.txt** - 这个文件通常包含了软件的许可协议,详细说明用户可以如何使用该软件,以及软件的版权信息。 3. **readme.txt** - 这是一个常见的文档,包含软件的使用说明、安装指南、常见问题解答等信息。...

    易语言QQ空间多Cookies管理源码

    源码使用说明.txt文件则提供了详细的使用指南,包括如何导入和调用这些模块,如何编写代码来管理Cookies,以及可能遇到的问题和解决方案。这将帮助开发者更好地理解和应用这套源码。 使用这套源码,开发者可以实现...

    javascript 操作cookies详解及实例.docx

    接下来,我们将详细介绍几种常见的使用 JavaScript 操作 Cookies 的方法。 ##### 3.1 设置 Cookies ```javascript function setCookie(name, value, time) { var strSec = getSec(time); var exp = new Date(); ...

    jquery.cookies.js

    同时,`说明.htm`文件可能包含了关于这个插件的详细使用指南和注意事项,建议在实际使用前查阅。 总的来说,`jquery.cookies.js`是jQuery生态系统中的一个强大工具,它让前端开发者能够更加便捷地管理和操作Cookie...

    简单博客程序-JavaWeb简单课设(含课程设计论文,含引文,含使用说明与修改说明)

    本程序主要分为五个页面,详细说明如下: ① 主页 实现与登录、注册页面的相互跳转,并可实现通过Cookies快速登录 ② 登录页面 实现登录功能,并可以与注册页面与主页进行相互跳转。 ③ 注册页面 实现注册功能,...

    清理计算机文件详细说明

    ### 清理计算机文件详细说明 在日常使用电脑的过程中,随着时间的推移,我们的计算机往往会积累大量的临时文件、缓存数据以及其他不必要的文件,这些文件不仅占用了宝贵的硬盘空间,还可能影响系统的性能与稳定性。...

    HttpWatch安装及使用说明

    ### HttpWatch安装及使用说明 #### 一、HttpWatch简介 HttpWatch是一款强大的网页数据分析工具,主要用于帮助开发者深入了解网页加载过程中的各种细节。该工具直接集成在Internet Explorer工具栏中,便于用户随时...

    PHP源码PHPMF0001全套毕业设计(含论文,源码,使用说明)

    根据提供的文件信息,我们可以推断出这是一套与PHP相关的毕业设计资料,包含了论文、源码及使用说明等。下面将对这套资料所涉及的重要知识点进行详细的解析。 ### PHP简介 PHP是一种广泛使用的开源服务器端脚本...

    Delphi indy10说明帮助文档(pdf格式)

    文档会详细讲解如何设置请求头、使用POST和GET方法、处理cookies以及如何与HTTPS(SSL/TLS)安全连接配合使用。 FTP方面,TIdFTP组件允许开发者实现文件上传和下载功能。文档将涵盖连接到FTP服务器、登录、切换目录...

Global site tag (gtag.js) - Google Analytics