利用cookie实现查看最近浏览

本文介绍了一种利用Cookie技术实现记录用户最近浏览历史的方法。通过分析Java Web应用中的具体实现,展示了如何设置和读取Cookie来跟踪用户的浏览行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在浏览网页的时候经常会在下一次打开浏览器的时候看到网页提供的最近浏览网页,这些都是怎么做的?

其实主要用是cookie技术


package entity;
//书的实体类
public class Book {
    private String id;
    private String name;
    private double price ;
    public double getPrice() {
         return price ;
    }
    public void setPrice(double price) {
         this.price = price ;
    }
    private String author;
    public Book(String id,String name, double price,String author ) {
         // TODO Auto-generated constructor stub
         this.id =id ;
         this.name =name ;
         this.price =price ;
         this.author =author ;
    }
    public String getId() {
         return id ;
    }
    public void setId(String id ) {
         this.id = id ;
    }
    public String getName() {
         return name ;
    }
    public void setName(String name ) {
         this.name = name ;
    }
    public String getAuthor() {
         return author ;
    }
    public void setAuthor(String author ) {
         this.author = author ;
    }
    @Override
    public String toString() {
         return "Book [id=" + id + ", name=" + name + ", price=" + price
                + ", author=" + author + "]" ;
    }

}


package utils;
import java.util.HashMap;
import java.util.Map;
//模拟数据库操作


import entity.Book;



public class DBUtils {
    private static Map<String, Book> books= new HashMap<String,Book>();
    //模拟数据库数据
    static{
         books.put("1" , new Book("1", "java入门",10,"小明" ));
         books.put("2" , new Book("2", "oracle入门",10,"小红" ));
         books.put("3" , new Book("3", "android入门",50,"小李" ));
         books.put("4" , new Book("4", "大数据",90,"小刚" ));
    }
    //得到所有的书
    public static Map<String, Book> getBooks(){
         return books ;
    }
    //根据id查找书籍
    public static Book  findBookById(String id ) {
        
         return books .get(id );
    }
}
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.prism.impl.Disposer.Target;

import entity.Book;
import utils.DBUtils;

public class BookServlet extends HttpServlet {

     /**
     * Constructor of the object.
     */
     public BookServlet() {
          super();
     }

     public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          out.write("书籍推荐:<br/>");
          Map<String, Book> books = DBUtils.getBooks();
          //遍历books
          for (Map.Entry<String, Book> book:books.entrySet()) {
               out.write("<a href='"+request.getContextPath()+"/servlet/BookDetailsServlet"
                         + "?id="+book.getKey()+"'"+"target='_blank'"+">"+book.getValue().getName()+"</a><br>");
              
          }
         
          out.write("<hr/>最近浏览的书有:<br>");
          Cookie[] cookies = request.getCookies();
          //遍历cookies
          for (int i = 0;cookies!=null&& i < cookies.length; i++) {
               if("historyBookId".equals(cookies[i].getName())){
                    String value = cookies[i].getValue();//1-2-3
                    String[] ids = value.split("-");
                    //遍历ids
                    for (int j = 0; j < ids.length; j++) {
                         Book book = DBUtils.findBookById(ids[j]);
                         out.print(" "+book.getName());
                    }
               }
          }
     }

     public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          doGet(request, response);
         
     }

}





import entity.Book;
import utils.DBUtils;

public class BookDetailsServlet extends HttpServlet {

     /**
     * Constructor of the object.
     */
     public BookDetailsServlet() {
          super();
     }


     public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          //显示图书的详细信息
         
         
          //获得id
          String id=request.getParameter("id");
          Book book = DBUtils.findBookById(id);
//          out.write(book.toString());
          out.print(book);
          //把当前浏览过的书的id写回客户端
          String historyBookId=organizeId(id,request);
          Cookie cookie=new Cookie("historyBookId", historyBookId);
          cookie.setPath("/");
          cookie.setMaxAge(Integer.MAX_VALUE);
          response.addCookie(cookie);
     }

     /**
     *
          客户端                  BookServlet          BookDetailsServlet
          1.没有cookie的情况          1                    historyBook=1
          2.有cookie,但没有historyBook                    historyBook=1
          3.historyBook=1          2                    historyBook=2-1
          4.historyBook=1-2          2                    historyBook=2-2
          5.historyBook=1-2-3     3               historyBook=2-1-3
          6.historyBook=1-2-3     4               historyBook=4-1-2
     */

     private String organizeId(String id, HttpServletRequest request) {
          // TODO Auto-generated method stub
          //得到客户端Cookie
          Cookie[] cookies = request.getCookies();
          if(cookies==null){
               return id;
          }
          Cookie historyBook=null;
          //遍历cookies
          for (int i = 0; i < cookies.length; i++) {
               if("historyBookId".equals(cookies[i].getName())){
                    historyBook=cookies[i];
               }
          }
          //如果没有historyBookId的cookie,则返回id
          if(historyBook==null){
               return id;
          }
          String value = historyBook.getValue();
          //切割组织的id
          String[] values = value.split("-");
          LinkedList<String> list=new LinkedList<String>(Arrays.asList(values));
          //如果小于3本书
          if(list.size()<3){
               //如何集合中包含该id,则删除原来的id,将id重新加到first
               if(list.contains(id)){
                    list.remove(id);
               }
          }else {
               if(list.contains(id)){
                    list.remove(id);
               }else {//如果已经有3个id了,则将集合的最后一个id删除
                    list.removeLast();
               }
          }
          list.addFirst(id);//将最新的书添加到最前面
          StringBuffer sb=new StringBuffer();
          //遍历list,在id之间加上'-'
          for (int i = 0; i < list.size(); i++) {
               if(i>0){
                    sb.append("-");
               }
               sb.append(list.get(i));
          }
          System.out.println(sb);
          return sb.toString();
     }



     public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          doGet(request, response);
     }

}




什么是cookies呢,Cookies是一个储存于浏览器目录中的文本文件,记录你访问一个特定站点的信息,且只能被创建这个Cookies的站点读回,约由255个字符组成,仅占4KB硬盘空间。当用户正在浏览某站点时,它储存于用户机的随机存取存储器RAM中,退出浏览器后,它储存于用户的硬盘中。储存Cookies中的大部分信息是普通的,如当你浏览一个站点时,此文件记录了每一次的击键信息和被访站点的地址等。但是许多Web站点使用Cookies来储存针对私人的数据,如:注册口令、用户名、信用卡编号等,即所谓的"追踪cookies",危害绝不亚于木马。 Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。 软件简介: IECookiesView是一个专门用来查看IECookies内容的工具, 它可以帮你搜寻并显示出你计算机中所有Cookies档案的数据,包括是哪一个网站写入Cookies的,内容有什么,写入的时间日期及此Cookies的有效期限等等资料。 你是否常常怀疑一些网站写入Cookies内容到你的计算机中是否会对你造成隐私的侵犯?使用本软件就能知道这些Cookies的内容都是些什么,如此这般,你心里就有底了,就该怎么做了。 此软件只对IE浏览器的Cookies有效,而且多多少少有刺探隐私的"嫌疑",所以,个别灵敏度高的杀毒软件会报毒,请留意!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值