声明:此篇文章为我从网上下载的doc文档里面的一部分内容,具体作者不知。
 
 
Cookie简介:Cookie是服务器保存在客户端上的一组数据。例如,一些登陆网站时会提示是否保存密码,或是选择登陆有效期(浏览器进程、一天、一个月等等),这些都可以使用Cookie来实现。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

Cookie
javax.servlet.http.Cookie
构造方法
Cookie(String name,String value)
服务器客户端设置 cookie
addCookie(Cookie cookie)

response 调用, 可反复使用该方法设置多个 Cookie
服务器客户端取回之前保留在客户端上的 cookie
Cookie[] getCookies()

request 调用
设置 cookie 在本地留存的时间
setMaxAge(int expiry)

cookie 对象调用

 

l 示例:设置Cookie
cookie01.jsp à 服务器响应客户的请求时,设置cookie到客户端:
² 先准备好cookie对象
然后利用 response.addCookie(Cookie cookie) 进行设置
<%    
           //构造Cookie对象,构造方法:Cookie(String name,String value)
          Cookie c1= new Cookie( "name", "Jerry");
          Cookie c2= new Cookie( "password", "1234");
          Cookie c3= new Cookie( "access_time", new Date().toString());
            
           //将Cookie设置给客户端
           //服务器向客户端传递数据,使用response对象
           //方法:reponse.addCookie(Cookie cookie)
            
          response.addCookie(c1);
          response.addCookie(c2);
          response.addCookie(c3);
%>
 
【注】浏览器窗口中看不到 Cookie 的信息

 

Cookie02.jsp à 如果需要,服务器可以从客户端取回 cookie ,这是从客户端传数据到服务器,故要使用 request 的方法: Cookie[] request.getCookies()
² 利用 request.getCookies() 取得 cookie 数组
遍历数组,取得其中每一个 cookie
<%
           //Cookie[] request.getCookies()方法
          Cookie[] cs = request.getCookies();
            
           for( int i=0;i<cs.length;i++){            
            Cookie tmp = cs[i];    
             //每一个Cookie由 name--value构成
             //可以使用 String getName() 和 String getValue() 获得各成分的值
                    
        %>    
            
          <h1> <%= tmp.getName() %> <%=tmp.getValue() %> </h1>
        <%    
          }        
            
           //JSESSIONID ACCE027387AADBD63525E4446F1DFD83是服务器自动设置的
           //代表这个客户端在服务器上的一个唯一编号
%>
 
【注】:每一个 cookie 都是由 name – value 构成(由构造方法可知), Cookie 类提供了如下 2 个方法获取 cookie name value 的值:
String getName()

String getValue()

 

l 设置Cookie的保存时间
²默认情况 下:cookie是仅在浏览器进程中有效。
(在一个窗口中先运行 cookie01.jsp实现设置cookie,然后仍然在这个窗口中运行 cookie02.jsp 取回cookie 并显示 是可以实现。但,如果在另外的浏览器窗口中直接运行 cookie02.jsp ,则无法再取回之前设置的cookie了)

 

²如果希望cookie能在本地留存一段时间,使得在一段时间之内都可以取回cookie,则可以利用Cookie类的setMaxAge(int expiry) 方法,expiry表多少秒后cookie过期。

 

修改cookie01.jsp cookie03.jsp ,增加cookie留存时间的设置,仍然使用cookie02.jsp取回cookie
<h1>利用Cookie类的setMaxAge( int expiry)可是设置cookie在本地计算机上留存一段时间,单位是秒</h1>

    <%
               //构造Cookie对象,构造方法:Cookie(String name,String value)
              Cookie c1= new Cookie( "name", "Jerry");
              Cookie c2= new Cookie( "password", "1234");
              Cookie c3= new Cookie( "access_time", new Date().toString());
                
               //设置留存时间30秒
              c1.setMaxAge(30);
              c2.setMaxAge(30);
              c3.setMaxAge(30);
                
               //将Cookie设置给客户端
               //服务器向客户端传递数据,使用response对象
               //方法:reponse.addCookie(Cookie cookie)
                
              response.addCookie(c1);
              response.addCookie(c2);
              response.addCookie(c3);
    %>
 
则运行 cookie03.jsp 完成设置 cookie 后,即使另开一个浏览器窗口,直接运行 cookie02.jsp 仍然可以取回 cookie 但时限到了之后 cookie 还是会失效。
但是,服务器自动设置的 JSESSIONID 还在。

 

 

我的备注:一个 servlet/jsp 设置的路径能够被同一路径或子路径下的 servlet/jsp 访问到,其它路径不能访问到。