cookie知識,小應用:記住用戶名;記錄用戶瀏覽記錄

cookie 技術:html

cookie屬性:數據庫

name: 名稱
value:取值
path:路徑(可選)
maxAge :生命週期,默認是一次回話
version:可選版本號
domain:域名(可選)
comment:備註(可選)數組

獲取瀏覽器最後的訪問時間:
代碼:
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter pw=response.getWriter();
 pw.write("您最後一次訪問的時間爲:<br/>");
 //獲取瀏覽器所有cookie
 Cookie []cookie=request.getCookies();
 //遍歷
 for(int i=0;cookie!=null&&i<cookie.length;i++){
  Cookie cook=cookie[i];
  if("lastAccessTime".equals(cook.getName())){
   //從瀏覽器上獲取到的爲字符串
   String value=cook.getValue();
   //將字符串解析爲十進制
   Long time=Long.parseLong(value);
   //將毫秒值轉化爲日期
   Date d=new Date(time);
   //顯示爲設定格式的日期
   DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String str=df.format(d);
   pw.write(str);
   break;
  }
 }
 //將第一次瀏覽的時間寫入cookie,顯示在瀏覽器上的必須是字符串
 Cookie c=new Cookie("lastAccessTime", System.currentTimeMillis()+"");
 response.addCookie(c);瀏覽器

 關閉瀏覽器意味着一次回話結束,從新打開瀏覽器,第一次訪問不會顯示時間,第二次訪問纔會有時間。服務器

清除cookie:
<a href='"+request.getContextPath()+"/servlet/TextCookie2'>清空</a>cookie

TextCookie2的代碼:
Cookie c=new Cookie("lastAccessTike", "");
c.setMaxAge(0);
response.addCookie(c);app

服務器的去訪問瀏覽器的cookie時,當服務器提供的路徑不是以瀏覽器存放的cookie的路徑開頭時,
僞代碼形式:服務器提供的路徑.startWith(瀏覽器存放的cookie的路徑)爲false時,
則沒法訪問原來存放於瀏覽器的cookie。dom

c.setPath(request.getContextPath());//本應用均可以訪問到該cookiepost


登陸頁面:
記住用戶名功能:
表單頁面:
//登陸表單
String value="";
String checked="";
//獲取包含全部的cookie的cookie數組
Cookie []c=request.getCookies();
for(int i=0;c!=null&&i<c.length;i++){
 Cookie cook=c[i];
 if("usernameinof".equals(cook.getName())){
  value=cook.getValue();
  checked="checked='checked'";
  break;
 }
}orm

response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter();
out.write("<form action='"+request.getContextPath()+"/servlet/TextCookie4' method='post'><br/>");
out.write("登陸用戶名:<input type='text' name='username' value='"+value+"'/><br/>");
out.write("密碼:<input type='password' name='psw'/><br/>");
out.write("記住用戶名:<input type='checkbox' name='remember' "+checked+"/> <br/>");
out.write("<input type='submit'  value='登陸'/><br/>");
out.write("</form>");

cookie頁面代碼:
response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter();
//獲取表單中的用戶名密碼和checkbox
String username=request.getParameter("username");
String password=request.getParameter("psw");
String remember=request.getParameter("remember");
//判斷賬號和密碼是否正確,這裏用簡單的反轉判斷
password=new StringBuffer(password).reverse().toString();
if(!username.equals(password)){
 out.write("請輸入正確的賬號和密碼,2秒後跳轉到登陸頁面");
 //跳轉到登陸頁面
 response.setHeader("Refresh", "2;URL="+request.getContextPath()+"/servlet/TextCookie3");
 return;
}

 

//將獲取到的數據保存到cookie中
Cookie c=new Cookie("usernameinof", username);
c.setPath(request.getContextPath());
if(remember!=null){
 c.setMaxAge(Integer.MAX_VALUE);
}else{
 c.setMaxAge(0);
}
response.addCookie(c);
out.write("恭喜你,登陸成功!");


記錄瀏覽過的商品:

商品類Book描述:普通的描述
模擬數據庫:

public class Bookdb {
 private static Map<String,Book> books=new HashMap<String, Book>();
 static{
  books.put("1", new Book("1", "玉女心經", "hehe"));
  books.put("2", new Book("2", "辟邪劍譜", "haha"));
  books.put("3", new Book("3", "葵花寶典", "xixi"));
 }
 //獲取全部書籍的方法
 public static Map<String, Book> findAllBooks(){
  return books;
 }
 public static Book findBookbyid(String bookid){
  return books.get(bookid);
 }
}

主顯示頁:
public class ShowAllBooks extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   response.setContentType("text/html;charset=UTF-8");
   PrintWriter out=response.getWriter();
   out.write("<h1>全部的好書</h1>");
   Map<String, Book> m=Bookdb.findAllBooks();
   Set<Map.Entry<String, Book>> s =m.entrySet();
   //顯示全部
   for(Map.Entry<String, Book> me:s){
    out.write(me.getValue().getName()+"<a href='"+request.getContextPath()+"/servlet/ShowBookDetal?bookid="+me.getKey()+"' target='_blank'>查看</a>"+"<br/>");
   }
   //將瀏覽過的顯示出來
   out.write("您瀏覽過的書籍"+"<br/>");
   Cookie []cs=request.getCookies();
   for(int i=0;cs!=null&&i<cs.length;i++){
    Cookie c = cs[i];
    if("book".equals(c.getName())){
     String value = c.getValue();
     String ids[] =value.split("\\-");
     for(String id:ids){
      out.write(Bookdb.findBookbyid(id).getName()+"<br/>");
     }
     break;
    }
   }
 }

書詳細描述顯示頁:public class ShowBookDetal extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  /*       當前id       寫入   * 1 無cookie,       1       1   * 2有cookie,但無book,   1       1   * 3cookie爲1     2       2-1   * 4cookie爲2-1     1       1-2   * 5cookie爲2-1     3       3-2-1   * 6cookie爲3-2-1    2       2-3-1   * 7cookie爲3-2-1    4       4-3-2   */  response.setContentType("text/html;charset=UTF-8");  PrintWriter out = response.getWriter();  //2顯示商品的詳細信息;  out.write("詳細內容:<br/>");  String bookid = request.getParameter("bookid");  Book book = Bookdb.findBookbyid(bookid);  out.write(book.toString());  //3寫cookie:記住瀏覽歷史記錄  String bookids = makeids(request,bookid);  Cookie c = new Cookie("book", bookids);  c.setMaxAge(Integer.MAX_VALUE);  c.setPath(request.getContextPath());  response.addCookie(c);   }  //組織寫到cookie中的書籍的id。多個id之間用-分割。最多存3個 /*  客戶端帶過來的ID     當前看的書的ID    應該寫回的ID  一、一個cookie都木有     1       bookHistory=1   二、有cookie,但沒有bookHistory  1       bookHistory=1   三、bookHistory=1     2       bookHistory=2-1  四、bookHistory=2-1     1       bookHistory=1-2  五、bookHistory=2-1     3       bookHistory=3-2-1  六、bookHistory=1-2-3    2       bookHistory=2-1-3  七、bookHistory=1-2-3    4       bookHistory=4-1-2  */ private String makeids(HttpServletRequest request, String bookid) {  Cookie []cos=request.getCookies();  //* 1 無cookie  if(cos==null){   return bookid;  }  //2有cookie,但無book,  Cookie bookHistory =null;  for(Cookie c:cos){   if("book".equals(c.getName())){    bookHistory=c;    break;   }  }  if(bookHistory==null){   return bookid;  }  /*   * 3cookie爲1     2        2-1   * 4cookie爲2-1     1       1-2   * 5cookie爲2-1     3       3-2-1   */  //獲取到瀏覽器傳來的cookie  String value=bookHistory.getValue();  String []ids=value.split("\\-");  LinkedList<String> list=new LinkedList<String>(Arrays.asList(ids)); if(list.size()<3){   //狀況4   if(list.contains(bookid)){    list.remove(bookid);   }  //狀況5    list.addFirst(bookid);  }  /*   * 6cookie爲3-2-1    2       2-3-1   * 7cookie爲3-2-1    4       4-3-2   **/  else{    if(list.contains(bookid)){    list.remove(bookid);   }else{    list.removeLast();   }   list.addFirst(bookid);  }  //2-3-1這樣的形式  StringBuffer sb=new StringBuffer();  for(int i=0;i<list.size();i++){   if(i>0){    sb.append("-");   }   sb.append(list.get(i));  }  return sb.toString(); }

相關文章
相關標籤/搜索