十三 cookies

12 篇文章 0 订阅

这边文章我们讨论cookies, cookies同样是用户session管理。在这里,让我们从上一边文章(Session in Servlet)重新看一些事情

这样我们就可以关联session与cookies了。当用户首次访问一个web应用,servlet容器通过调用request.getSession()创建新的

HttpSession对象。一个唯一的id分配个这个session。 servlet容器也在Http 响应头中设置了cookies名称,唯一的session ID

作为它的值。

 

cookies存储在用户的浏览器中,客户端(用户的浏览器)发送到服务器的请求都回发送cookies直到这个cookies不可用。servlet容器

检查请求头中的cookies,并且从cookies中获取session信息,并使用服务器关联的session。

 

这个session在web.xml标签中指定的时间内是有效的。如果没有在web.xml中指定,那么这个session的有效时间为30分钟。只要用户

的浏览器在运行这个cookies就是有效的,直到浏览器关闭,这个cookies和关联的sessions就被销毁。因此当用户再次打开浏览器并发

送请求到web服务器上,就会创建一个session.

 

Cookies的类型:

我们可以通过它们的过时时间类酚类它们。

1 Session

2 Persistent

 

1) SessionCookies:

Session cookies 不会有过期是叫你。它一直存在浏览器的内存中,只有web浏览器被关闭cookies才会被销毁。

2)PersistentCookies:

不像Session Cookies, 它们有过期时间,它们被存储在用户的硬盘中根据过期时间销毁它们。

 

怎么向客户端发送cookies?

 

这里是发送cookies 到客户段的步骤:

1 创建Cookies对象

2 设置最大时间

3 把Cookies放入到Http 响应头中

 

1) 创建Cookies对象:

Cookie c = new Cookie("userName","Chaitanya");

2) 设置最大时间:

通过使用setMaxAge()方法,我们可以设置最大时间,一般这个是秒为单位。

c.setMaxAge(1800);

3) 把Cookies放入到Http 响应头中

我们可以通过下main的方法发送cookies到客户的浏览器

response.addCookie(c);

 

怎么获取cookies?

Cookie c[]=request.getCookies(); 
//c.length gives the cookie count 
for(int i=0;i<c.length;i++){  
 out.print("Name: "+c[i].getName()+" & Value: "+c[i].getValue());
}

Cookies类中的方法

 

1) public void setComment(String purpose):

这个方法用于设置cookies的备注,基本用户描述该cookies

2) public String getComment():

返回该cookies的描述,如果不存在则返回null.

 

3) public void setMaxAge(int expiry):

设置cookies的最大有效时间,单位秒。

 

4) public int getMaxAge():

获取该cookies的最大时间,单位秒。默认为-1,表示这个cookies一直存在直到浏览器关闭。

 

5) public String getName():

返回cookies名称,名称一旦创建就不能改变。

 

6) public void setValue(String newValue):

设置cookie的值。

 

7) public String getValue():

获取当前cookies值。

 

上面的方法只是一般经常被使用的方法。完整的方法清单请参考官方文档。

例子:

index.html

<form action="login">
 User Name:<input type="text" name="userName"/><br/>
 Password:<input type="password" name="userPassword"/><br/>
 <input type="submit" value="submit"/>
</form>
MyServlet1.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet1 extends HttpServlet 
{
   public void doGet(HttpServletRequest request, 
      HttpServletResponse response) {
      try{
          response.setContentType("text/html");
          PrintWriter pwriter = response.getWriter();

          String name = request.getParameter("userName");
          String password = request.getParameter("userPassword");
          pwriter.print("Hello "+name);
          pwriter.print("Your Password is: "+password);

          //Creating two cookies
          Cookie c1=new Cookie("userName",name);
          Cookie c2=new Cookie("userPassword",password);

          //Adding the cookies to response header
          response.addCookie(c1);
          response.addCookie(c2);
          pwriter.print("<br><a href='welcome'>View Details</a>");
          pwriter.close();
   }catch(Exception exp){
       System.out.println(exp);
    }
  }
}
MyServlet2.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet2 extends HttpServlet {
 public void doGet(HttpServletRequest request, 
    HttpServletResponse response){
    try{
       response.setContentType("text/html");
       PrintWriter pwriter = response.getWriter();
 
       //Reading cookies
       Cookie c[]=request.getCookies(); 
       //Displaying User name value from cookie
       pwriter.print("Name: "+c[1].getValue()); 
       //Displaying user password value from cookie
       pwriter.print("Password: "+c[2].getValue());
 
       pwriter.close();
    }catch(Exception exp){
       System.out.println(exp);
     }
  }
}
web.xml

<web-app>
<display-name>BeginnersBookDemo</display-name>
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 </welcome-file-list>
<servlet>
 <servlet-name>Servlet1</servlet-name>
 <servlet-class>MyServlet1</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>Servlet1</servlet-name>
 <url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
 <servlet-name>Servlet2</servlet-name>
 <servlet-class>MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>Servlet2</servlet-name>
 <url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值