JSP 页面中对Cookie的操做

一.什么是cookies?java

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

  cookies给网站和用户带来的好处很是多:数组

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

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

  四、Cookie能帮助站点统计用户我的资料以实现各类各样的个性化服务服务器

  在JSP中,咱们也可使用Cookie,来编写一些功能强大的应用程序。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);
  %>  

1、 前言

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

虽然如今网页的制做技术比起几年之前已经发展了许多。不过有些时候,Cookie仍是可以帮咱们不少忙的。接下来,咱们就来看看,如何在写JSP文件的时候,用JSP操做Cookie。
=======================================

2、 保存写入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文件在一年内有效。

3、 读取出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放在一张表格中进行显示。
=======================================

4、 须要注意的一些问题

经过上面两个简单的例子,能够看到,用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的内容中尽可能避免使用这些字符。(karry/大众网络报)

相关文章
相关标签/搜索