jsp中cookie 读写操作详解介绍

Cookie中的信息是以键值对存在的,Cookie文件是以ASCII编码存储的,所以如果想存储中文信息,需额外进行编码后再存储到Cookie中,读取时再解码。

Cookie从服务器传送到客户端时通过在响应头信息中使用:

Java代码

 代码如下 复制代码

Set-Cookie: NAME=VALUE;   
  
                      expires=DATE;   
  
                      path=PATH;   
  
                      domain=DOMAIN_NAME;   
  
                      secure   
  

NAME=VALUE

是Cookie信息中最关键的属性,name为Cookie的名字,value为对应的值。必需的。

expires

Cookie有效期。格式为:Wdy, DD-Mon-YYYY HH:MM:SS GMT。当超过这个时间,此cookie将失效。可选属性,如果未指定过期时间,则在当前会话结束后失效。

path

cookie在当前域名的哪个路径下可见。如果设置为"/",则在当前域名下的所有路径均可见;如果设置为"/news",则只能在"http://XXX.com/news"下可见。如果为未设置,则在哪个页面产生就只能在该页面访问。

domain=DOMAIN_NAME

可以访问该Cookie的域名地址。google.com的cookie只属于google.com,不能被baidu.com操作。当将域名设置为".google.com",最前面的一个点,表示,google.com下的所有二级域名都和一级域名共享Cookie。否则,code.google.com域名无法使用google.com下的Cookie,只能使用code.google.com下的Cookie。

secure

指定当前cookie是否使用安全协议发送cookie(SSL,HTTPS等)。

上面是在响应头信息的设置,如果客户端需要提交Cookie到服务器,则格式为:

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 …

以Cookie打头,每个键值对之间分号相隔。

关于Cookie的更多信息,请访问NetScape Cookie规范。(目前多数浏览器都已支持,其他Cookie规范(比如w3c的)不是所有浏览器都支持,所以NetScapeCookie较常见。)

Java中的Cookie
在java中,把Cookie封装在了javax.servlet.http.Cookie类中。我们所操作的每一个cookie都是该类的对象。

要增加一个cookie时,先声明一个Cookie对象,就是javax.servlet.http.Cookie类对象,在声明构造同时可以带两个参数(Cookie名,Cookie值),比如:

 代码如下 复制代码

Cookie cookie = new Cookie("name","the8m");

声明了一个Cookie对象,Cookie名为name,值为the8m。接着,我们需要将这个Cookie添加到响应response中,发送给客户端。

response.addCookie(cookie);

 

这样一个简单的Cookie就存储到客户端了。

读取Cookie

当通过response.addCookie(Cookie cookie)给客户端添加了一个Cookie后,我们可以使用request.getCookie()获取一个Cookie对象数组,因为有可能一个页面存储了多个Cookie。

下面是示例:

Java代码

 代码如下 复制代码
<%   
    if(request.getCookies()!=null)   
    {   
        for(Cookie coo : request.getCookies())   
        {   
            String name = coo.getName()   
            String value =  coo.getValue()   
            out.println(name+"-- "+value);   
        }   
    }   
%>  

我们还可以使用EL表达式中的内置隐藏对象cookie读取,比使用request对象获取方便很多。

Java代码

 代码如下 复制代码
${cookie}<!-- 显示所有Cookie对象 -->   
${cookie.age.name }<!-- 显示Cookie名为age的name -->   
${cookie.age.value }<!-- 显示Cookie名为age的值 -->  

Cookie名与Cookie值

名称必须遵守 RFC 2109。这意味着它只能包含 ASCII 字母数字字符,不能包含逗号、分号或空格,也不能以 $ 字符开头。cookie 的名称在创建之后不得更改。

值不能包含空格,方括号,圆括号,等号,逗号,双引号,斜杠,问号,@,冒号,分号。如果值为二进制数据,需要使用BASE64编码,比如图片。

Cookie与中文

Cookie文件是以ASCII编码格式存储的,占2个字节,而中文则属于Unicode中的(Unicode包含世界上所有语言的符号,当然包括咱的汉字了)字符,占4个字符。

所以,如果想在Cookie中保存中文的话,必需得进行相应的编码后才能正确存储,读取时再解码。

一般使用java.net.URLEncoder.encode(String s,String enc)进行编码,会得到application/x-www-form-urlencoded MIME字符串。

使用java.net.URLDecoder.decode(String s,String enc)进行解码。

两个方法中的第二参数,一般默认为UTF-8即可。

Java代码

 代码如下 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" %>   
<jsp:directive.page import="java.net.*"/>   
<%   
    Cookie cookie = new Cookie(   
            URLEncoder.encode("姓名","UTF-8"),   
            URLEncoder.encode("李佳龙","UTF-8")   
    );   
    response.addCookie(cookie);   
%>   
<html>   
<title>Cookie-中文</title>   
<body>   
<%   
    if(request.getCookies()!=null)   
    {   
        for(Cookie coo : request.getCookies())   
        {   
            String name =URLDecoder.decode(coo.getName(),"UTF-8");   
            String value = URLDecoder.decode(coo.getValue(),"UTF-8");   
            out.println(name+"-- "+value);   
        }   
    }   
%>   
</body>   
</html>   

application/x-www-form-urlencoded类似于我们在浏览器地址栏中经常看到的那些带有百分号的符号,比如。使用谷歌浏览器搜索"姓名",最后生成的URL为:

 

时间: 2024-11-08 18:53:12

jsp中cookie 读写操作详解介绍的相关文章

jQuery中的select操作详解_jquery

下面给大介绍了jquery对select的操作介绍,非常不错,具有内容介绍如下所示: select的html标签如下: <select class="xxx" id="yyy"><option></option>...<option></option></select> 1.设置value为"lll"的option选中 $('#yyy').val("lll"

Laravel5中Cookie的使用详解

今天在Laravel框架中使用Cookie的时候,碰到了点问题,自己被迷糊折腾了半多小时.期间研究了Cookie的实现类,也在网站找了许多的资料,包括问答.发现并没有解决问题.网上的答案都是互相抄袭,互相转载.其实并没有什么用处.好在最后,我找到了决绝方法.奔着为广大Laravel爱好者和开发人员负责的精神,同时也希望大家在使用Cookie时少走弯路,在这里把在Laravel中Cookie的设置和读取方法贡献出来,供大家批评指正. 概述 Cookie的添加其实很简单,直接使用Cookie::ma

使用技巧:对Java编程中的文件操作详解

编程|技巧|详解 一.获得控制台用户输入的信息 /** *//**获得控制台用户输入的信息 * @return * @throws IOException */ public String getInputMessage() throws IOException...{ System.out.println("请输入您的命令∶"); byte buffer[]=new byte[1024]; int count=System.in.read(buffer); char[] ch=new

Android 中cookie的处理详解

android 客户端 Cookie处理 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明. 发起 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器,客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启

JS中对Cookie的操作详解_javascript技巧

前言 cookie设置 参数说明: name cookie 名称,key值 value 可选,cookie 值 expire 可选,过期时间,时间戳格式 path 可选,服务器端有效路径,/ 表示整个域名有效,默认为当前设置 cookie 时页面的路径 domain 可选,该 cookie 有效的域名 secure 可选.规定是否通过安全的 HTTPS 连接来传输 cookie. 代码的封装 (function(){ var cookieObj={ 'add':function(name, va

JSP 中EL表达式用法详解

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

jquery中cookie用法实例详解(获取,存储,删除等)_jquery

本文实例讲述了jquery中cookie用法.分享给大家供大家参考,具体如下: cookie在jquery中有指定的cookie操作类,下面我先来介绍我们在使用cookie操作类时的一些问题,然后介绍正确的使用方法. 使用JQuery操作cookie时 发生取的值不正确的问题: 结果发现cookie有四个不同的属性: 名称,内容,域,路径 $.cookie('the_cookie'); // 读取 cookie $.cookie('the_cookie', 'the_value'); // 存储

jsp中page指令用法详解_JSP编程

本文实例讲述了jsp中page指令用法.分享给大家供大家参考.具体如下: 一.JSP 指令 JSP 指令(directive)影响由 JSP 页面生成的 servlet 的整体结构.下面的模板给出指令的两种可能形式.属性值两边的双引号可以替换为单引号,但引号标记不能完全省略.如果要在属性值中使用引号,则要在它们之前添加反斜杠,' 使用 \'," 使用 \" <% directive attribute="value" %> <% directive

JSP中JavaBean应用步骤详解

编写JSP动态网页设计时,怎么应用JavaBean呢?下面我一步步讲解,说明一下,这只是我的经验,可能并不完全概括,当然我已经成功地 编译通过和正确使用了. (有关图示如下) JavaBean的.class字节文件可以放到tomcat本身就有的classes目录下,但是最好自定义目录,在当前目录建立以下目录:-/WEB- INF/classes(比如我用的是webapps/Example/WEB-INF/classes/ .上图中,我所举的例子中所用的Hello.java ,已经编译通过,生成