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(); }