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