javaWeb中的cookie

来源:互联网 发布:ios7软件下载 编辑:程序博客网 时间:2024/05/17 17:41

1.Cookie是干嘛的?

由于HTTP请求是无状态的,每次请求和响应和上次请求和响应没有太多关系。但是,有些时候我们需要记住上次会话的一些信息。

这就用到了Cookie技术。Cookie是服务器把信息保存在客户端的一种技术。

2. Cookie怎么用?

(1)发送到浏览器端: 

Cookie  cookie=new Cookie("name","value");

response.addCookie(cookie);


(2) 浏览器发送到服务器

//获得cookie数据

Cookie[] cookies=request.getCookies();

//遍历需要的cookie

if(cookies!=null && cookikes.length>0){

for(Cookie c : cookies){

if (c.getName().equals("user") ){  

system.out.println(c.getValue());

} }  }

3. 原理:

(1)让浏览器端保存cookie,是服务器向浏览器发送一个键值对的response 响应头

set-Cookie : user=Tom

  (2) 浏览器把cookie带到服务器是向服务器发送一个请求头

Cookie: user=Tom

4.简单例子:浏览历史。

         JSP中:

<body>
   <a href="<%=request.getContextPath() %>/CServlet?name=Dell">Dell</a><br/>
   <a href="<%=request.getContextPath() %>/CServlet?name=Lenovo">Lenovo</a><br/>
   <a href="<%=request.getContextPath() %>/CServlet?name=Acer">Acer</a><br/>
   <a href="<%=request.getContextPath() %>/CServlet?name=Hupo">Hupo</a><br/>
   <a href="<%=request.getContextPath() %>/CServlet?name=Apple">Apple</a><br/>
    浏览历史:
    <%=request.getAttribute("history") %>
  </body>

     Servlet中:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1获得当前访问的品牌
String current=request.getParameter("name");
//2获得之前访问的品牌 (cookie)
Cookie history=null;
Cookie[] cookies=request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("history")){
history=c;
}
}
//3 强当前访问的加上之前访问的,创建一个新的cookie
String value="";
if(history!=null){
if(history.getValue().contains(current)){
value=history.getValue();
}else{
value=history.getValue()+","+current;
}
}
else{//第一次访问的时候,history为“”;

history.setValue(current);
}
Cookie newHistory = new Cookie("history",value);
//4将cookie添加到响应中
response.addCookie(newHistory);
//5强商品记录添加到request中
request.setAttribute("history", value);
//6转发到jsp页面中
request.getRequestDispatcher("/List.jsp").forward(request, response);//转发过去
}

5. Cookie 细节

Cookie的生命周期,即Cookie在浏览器端创建到Cookie销毁的周期。

可以通过函数设定Cookie在浏览器端的存活时间。

cookie.setMaxAge(60*60*24); //设置时间为一天。 

  默认情况下,创建Cookie不设置时间的话,相当于 cookie.setMaxAge(-1);  相当于关闭浏览器的时候销毁Cookie。

cookie.setMaxAge(0); 是立即销毁Cookie。

6.例子,记住用户名。

JSP端:

 <form action="/cookies/DServlet" method="post">
    用户名: <input type="text" name="username" value=<%=remeber==null?"":remeber.getValue()%>/><br/>
   密&nbsp码: <input type="password" name="pwd"/><br/>
   记住用户名 <input type="checkbox" value="yes" name="remeber"/>
  <input type="submit" value="登陸 "/><br/>
  </form>
   
  <%
  //1 获得所有cookie
  Cookie[] cookies=request.getCookies();
  Cookie remeber=null;
  for(Cookie c:cookies){ //2遍历得到索要的cookie
  if(c!=null&&c.getValue().length()>0){
  //不为空就取出值 输出到username 那里
  if(c.getName().equals("remeber"))
  {
  remeber=c;
  }
  }
  }
 
              %>

Servlet端:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
   //1 获得用户名
String usernameString=request.getParameter("username");
String pwd=request.getParameter("pwd");
//2 获得是否记住用户名
String flag=request.getParameter("remeber");
// 1)记住 设置cookie 2)不记住,销毁cookie
Cookie cookie=new Cookie("remeber", usernameString);
if(flag!=null&&flag=="yes"){
cookie.setMaxAge(60*60*24*7);
}
else{
cookie.setMaxAge(0);
}//3将cookie添加到respons
response.addCookie(cookie);
request.getRequestDispatcher("/success.jsp").forward(request, response);//4转到成功页面
}
 



以上内容为本人的学习笔记。有不对之处望批评指正。




0 0
原创粉丝点击