Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1014|回复: 0

jsp中cookie的详细用法和介绍

[复制链接]

该用户从未签到

发表于 2011-7-31 21:54:43 | 显示全部楼层 |阅读模式
一.什么是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(&quotarameter","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的主要属性,及其方法列于下,供大家参考:

  

类型方法名方法解释
StringgetComment()返回cookie中注释,假如没有注释的话将返回空值.
StringgetDomain()返回cookie中Cookie合用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。留意域名必需以点开始(例如.yesky.com)
intgetMaxAge()返回Cookie过时之前的最大时间,以秒计算。
StringgetName()返回Cookie的名字。名字和值是我们始终关心的两个部门,笔者会在后面具体先容 getName/setName。
StringgetPath()返回Cookie合用的路径。假如不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。
booleangetSecure()假如浏览器通过安全协议发送cookies将返回true值,假如浏览器使用尺度协议则返回false值。
StringgetValue()返回Cookie的值。笔者也将在后面具体先容getValue/setValue。
intgetVersion()返回Cookie所遵从的协议版本。
voidsetComment(String purpose)设置cookie中注释。
voidsetDomain(String pattern)设置cookie中Cookie合用的域名
voidsetMaxAge(int expiry)以秒计算,设置Cookie过时时间。
voidsetPath(String uri)指定Cookie合用的路径。
voidsetSecure(boolean flag)指出浏览器使用的安全协议,例如HTTPS或SSL。
voidsetValue(String newValue)cookie创建后设置一个新的值。
voidsetVersion(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;   //掏出数组中的一个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掏出数组中的一个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的内容中尽量避免使用这些字符
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-7-31 22:25:30 | 显示全部楼层
    谢谢楼主分享。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-24 01:24 , Processed in 0.399602 second(s), 51 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表