HTTP Cookie详解

1.什么是HTTP Cookie?

  Wikipedia给出的定义是:An HTTP cookie is a small piece of data sent from a website and stored in the user's web browser while the user is browsing.

概括一下:

  1) HTTP cookie首先是数据 -> 在服务器端被创建 -> Set-Cookie响应头携带Cookie信息 -> 通过HTTP协议传输 -> 存储于客户端。

  2) 当客户端再一次访问该网站的时候 -> Cookie请求头携带Cookie信息 -> 通过HTTP协议传输 -> 服务端拿到Cookie进行解析。

2. 为什么要使用Cookie

   Cookie最早出现于1994年,当时网景公司的Lou Montulli首先将Cookie技术用于Web通信。随着时代的发展,Cookie的标准文档被一次次修改细化。最新的Cookie标准制定于2011年,具体可以参照RFC2965文档。

  Cookie的出现是解决了HTTP协议的无状态性,为浏览器和Web服务器之间提供了一种有效的状态信息交换方式。下面通过一个简单的用户登录系统示例,简单介绍Cookie在JavaWeb中的应用。

3.项目代码示例:

  1)项目结构

  

  2)项目代码:

   登陆页面login.jsp核心代码:

 1 <%
 2             String username = "";
 3             String password = "";
 4             
 5             Cookie[] cookies = request.getCookies();
 6             
 7             if(cookies != null && cookies.length > 0) {
 8                 for(Cookie cookie: cookies) {
 9                     if(cookie.getName().equals("user")){
10                         username = cookie.getValue();
11                     }
12                     if(cookie.getName().equals("pass")){
13                         password = cookie.getValue();
14                     }
15                 }    
16             }
17         %>
18         <form action="LoginServlet" method="post">
19         <h1>User Login</h1>
20         username:<input type="text" name="user" value="<%=username%>" /><br>
21         password:<input type="text" name="pass" value="<%=password%>" /><br>
22         <input type="submit" value="confirm" />
23         </form>

  处理代码LoginSerlvet核心代码:

  

 1      String username = request.getParameter("user");
 2         String password = request.getParameter("pass");
 3         
 4         Cookie userCookie = new Cookie("user", username);
 5         Cookie passCookie = new Cookie("pass", password);
 6         
 7         response.addCookie(userCookie);
 8         response.addCookie(passCookie);
 9         
10         if(username.equals("petersong") && password.equals("12345")) {
11             request.getRequestDispatcher("/login_success.html").forward(request, response);
12         } else {
13             request.getRequestDispatcher("/login_failure.html").forward(request, response);
14         }

4.项目运行实例

  1)第一次访问login.jsp

  2)第一访问LoginServlet

  3)第二次访问login.jsp

 

posted @ 2016-10-18 21:17  宋文勇  阅读(678)  评论(0编辑  收藏  举报