Cookie的处理—软件测试专项技术(11)

发表于:2020-5-06 11:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51Testing教研团队    来源:51Testing软件测试网原创

分享:
   3.1.10  Cookie的处理
    通过Cookie识别用户的3个步骤如下。
  (1)服务器脚本向浏览器发送一组Cookie,如姓名、年龄或识别号码等。
  (2)浏览器将这些信息存储在本地计算机上,以便将来使用。
  (3)当浏览器下一次向Web服务器发送任何请求时,浏览器会把这些Cookie信息发送到服务器,服务器将使用这些信息来识别用户。
  1.通过 Servlet 设置 Cookie
  通过Servlet设置Cookie包括以下3个步骤。
  (1)创建一个Cookie对象。可以调用带Cookie名称和Cookie值的Cookie构造函数,Cookie名称和Cookie值都是字符串。
  语法如下。
 Cookie cookie = new Cookie("key","value");
  (2)设置最大生存周期。可以使用setMaxAge方法来指定Cookie能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为24小时的Cookie。
  语法如下。
 cookie.setMaxAge(60*60*24);
  (3)发送Cookie到HTTP响应头。可以使用response.addCookie来添加HTTP响应头中的Cookie。
  语法如下。
 response.addCookie(cookie);
  2.通过Servlet读取Cookie
  为了读取 Cookie,需要通过调用HttpServletRequest的getCookies()方法创建一个javax.servlet.http.Cookie对象的数组,然后遍历数组,并使用getName()与getValue()方法访问每个Cookie和关联值。
  3.通过Servlet设置和读取Cookie的示例
  在该示例中,先通过表单提交一个网站名和网址,然后把网站名和网址都存放到Cookie中,再通过Cookie读出来并显示在屏幕上。示例分为3个文件。这3个文件在Eclipse项目树中的位置如图3-37所示。
  图3-37  3个文件在Eclipse项目树中的位置
  首先,创建一个客户端提交的表单,命名为Myform.html。
   <!DOCTYPE html>
  <html>
  <head>
  <meta charset="UTF-8">
  <title>This is a setcookie form sample.</title>
  </head>
  <body>
  <form action=/FirstServletProject/SetCookie method="POST">
  请输入网站地址 :<input type="text" name="name">
 
   <br />
  请输入网站URL:<input type="text" name="url" /><br>
  <input type="submit" value="提交" />
  </form>
  </body>
  </html>
  然后,编写设置Cookie的代码,命名为SetCookie.java。
   package ver.son.fsproject;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.http.Cookie;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  @WebServlet("/SetCookie")
  public class SetCookie extends HttpServlet {
  private static final long serialVersionUID = 1L;
  protected void doPost(HttpServletRequest request, HttpServletResponse
  response) throws ServletException, IOException {
  //创建 Cookie
  Cookie name = new Cookie("name",request.getParameter("name"));
  Cookie url = new Cookie("url",request.getParameter("url"));
  //为两个 Cookie 设置过期时间为 24 小时后
  name.setMaxAge(60*60*24);
  url.setMaxAge(60*60*24);
  //在响应头中添加两个 Cookie
  response.addCookie( name );
  response.addCookie( url );
  //设置响应内容类型
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  String title = "设置我的 Cookie 实例";
  String docType = "<!DOCTYPE html>\n";
  out.println(docType +
  "<html>\n" +
  "<head><title>" + title + "</title></head>\n" +
  "<body>\n" +
  "<h1 align=\"center\">" + title + "</h1>\n" +
  "<ul>\n" +
  "  <li><b>网站名:</b>:"
  + request.getParameter("name") + "\n</li>" +
  "  <li><b>网站地址:</b>:"
  + request.getParameter("url") + "\n</li>" +
  "</ul>\n" +
  "</body></html>");
  }
  }
  最后,编写读取Cookie的代码,命名为ReadCookies.java。
   package ver.son.fsproject;
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.Cookie;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  @WebServlet("/ReadCookies")
  public class ReadCookies extends HttpServlet {
  private static final long serialVersionUID = 1L;
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
  Cookie cookie = null;
  Cookie[] cookies = null;
  //获取与该域相关的 Cookie 的数组
  cookies = request.getCookies();
  //设置响应内容类型
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  String title = "My Cookie read example!";
  String docType = "<!DOCTYPE html>\n";
  out.println(docType +
  "<html>\n" +
  "<head><title>" + title + "</title></head>\n" +
  "<body>\n" );
  if( cookies != null ){
  out.println("<h2>以下显示Cookie 名称和值</h2>");
  for (int i = 0; i < cookies.length; i++){
  cookie = cookies[i];
  out.print("名称:" + cookie.getName( ) + "<br/>");
  out.print("值:" + cookie.getValue() +" <br/>");
  }
  }else{
  out.println(
  "<h2>No cookie Existing</h2>");
  }
  out.println("</body>");
  out.println("</html>");
  }
  }
  4.直接运行Myform.html
  这个文件通过<form action=/FirstServletProject/SetCookie method="POST">中指定的action内容,调用SetCookie的Servlet。在运行过程中输入网站名和网址,提交后就会保存Cookie,同时返回运行结果,如图3-38所示。
  图3-38  第一次的运行结果
  此时再次运行ReadCookie的Servlet,就会看到读出了Cookie,如图3-39所示。
  图3-39  第二次的运行结果

查看《软件测试专项技术--基于Web、移动应用和微信》全部连载内容>>
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号