`
vincent_com
  • 浏览: 43936 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类

cookie 实现历史浏览商品并排序

 
阅读更多
//商品历史浏览记录

public class HistoryCookieUtil {


    private final static String HISTORY_PRE  = "history_"; //Cookie中,历史浏览
    private final static String HISTORY_PATH = "/";  //Cookie中,历史浏览的Cookie的路径


    //清除所有历史浏览记录
    public static void removeAllHistoryCookie(HttpServletRequest request,HttpServletResponse response) {
        Cookie[] cookies = request.getCookies();
        if (null == cookies || cookies.length == 0) {
            return;
        }
        for (Cookie thisCookie : cookies) {
            if (thisCookie.getName().startsWith(HISTORY_PRE)) {
                thisCookie.setMaxAge(0); // 删除这个cookie
                thisCookie.setPath(HISTORY_PATH);
                response.addCookie(thisCookie);
            }
        }
    }

    //清除单个商品的浏览记录
    public static void removeHistoryCookie(HttpServletRequest request,HttpServletResponse response, Long goodsId) {
        if (goodsId == null) {
            return;
        }
        Cookie[] cookies = request.getCookies();
        if (null == cookies || cookies.length == 0) {
            return;
        }
        for (Cookie thisCookie : cookies) {
            if (thisCookie.getName().equals(HISTORY_PRE + goodsId)) {
                thisCookie.setMaxAge(0); // 删除这个cookie
                thisCookie.setPath(HISTORY_PATH);
                response.addCookie(thisCookie);
            }
        }
    }

    //加入单个商品浏览记录到cookie(有效期30天)
    public static void setHistoryCookie(HttpServletRequest request,HttpServletResponse response, Long goodsId) {
        if (goodsId == null) {
            return;
        }
        String nameString = HISTORY_PRE + goodsId.toString();
        Cookie cookie = new Cookie(nameString, goodsId.toString());
        cookie.setPath(HISTORY_PATH);
        cookie.setMaxAge(3600 * 24 * 30); // 30 days
        response.addCookie(cookie);
    }


  
    public static void addHistoryCookie(HttpServletRequest request,HttpServletResponse response,ServletContext servletContext, Long goodsId) {
        if (goodsId == null ) {
            return;
        }
        Integer viewNum = 10;//页面商品显示的个数(默认显示10)
        String thetype = EnumBoardName.toMap().get("browse_history");//汉字表示
        BoardDao boardDao = (BoardDao) getBean(servletContext, "boardDao");
        Board board = boardDao.getBoardByName(thetype);
        if(null != board && null != board.getAmount()){
         viewNum = board.getAmount();
        }
        String nameString = HISTORY_PRE + goodsId.toString();
        Cookie[] cookies = request.getCookies();
        int historyCookieNum = 0;//历史浏览的当前 cookie 数目
        if (null != cookies && cookies.length > 0) {
            for (Cookie thisCookie : cookies) {
                if (thisCookie.getName().startsWith(HISTORY_PRE)) {
                  historyCookieNum++;
                }
            }
        }
        if(historyCookieNum<viewNum){//小于显示数目时候
         String flagexist ="no";//标记cookie中是否存在相同的历史浏览商品
            for (Cookie thisCookie : cookies) {
                if (thisCookie.getName().equalsIgnoreCase(nameString)) {//如果有相同的记录先移去 再加上
                 removeHistoryCookie(request, response, goodsId);
                 setHistoryCookie(request, response, goodsId);
                 flagexist ="yes";
                    break;
                }
            }
            if(flagexist.equals("no")){//cookie中不存在则直接加入cookie
             setHistoryCookie(request, response, goodsId);
            }
        }
        if(historyCookieNum == viewNum){//等于显示数目的时候移去最旧一个记录 加入新的记录
         List<String> list = new ArrayList<String>();//存放当前的历史cookie
            for (Cookie thisCookie : cookies) {
                if (thisCookie.getName().startsWith(HISTORY_PRE)) {//
                 String oldGoodsId = thisCookie.getValue();//
                 list.add(oldGoodsId);
                }
            }
            if(list.contains(goodsId.toString())){//判断(防止详情页面不断刷新调用addcookie方法)
             removeHistoryCookie(request, response, goodsId);
             setHistoryCookie(request, response, goodsId);
            }else{
                for (Cookie thisCookie : cookies) {
                    if (thisCookie.getName().startsWith(HISTORY_PRE)) {//去掉第一条旧的历史记录
                     String oldGoodsId = thisCookie.getValue();//旧的商品ID
                     removeHistoryCookie(request, response, Long.valueOf(oldGoodsId));
                     setHistoryCookie(request, response, goodsId);
                        break;
                    }
                }
            }
        }
        if(historyCookieNum > viewNum){//考虑后台重新设置历史显示数目变小后的情况,历史cookie中存在的数目大于设置显示的数目后要重新获取前viewNum条历史记录
         removeAllHistoryCookie(request, response);//先移除所有历史浏览记录
         int addNewNum = 0 ;
            for (int i=cookies.length-1;i>0;i-- ) {
                if(viewNum == addNewNum){//获取到设置数目的记录后跳出
                 break;
                }
                if (cookies[i].getName().startsWith(HISTORY_PRE)) {
                 String getnewgoodsId = cookies[i].getValue();
                 if(null != getnewgoodsId && getnewgoodsId.length()>0){
                  setHistoryCookie(request, response, Long.valueOf(getnewgoodsId));
                  addNewNum++ ;
                 }
                }
            }
        }

    }

   
    public static List<RankGoods> getHistoryRankList(HttpServletRequest request,ServletContext servletContext) {
        List<RankGoods> list = new ArrayList<RankGoods>();
        Cookie[] cookies = request.getCookies();
        if (null == cookies || cookies.length < 1) {
            return null;
        }
        String thetype = EnumBoardName.toMap().get("browse_history");//汉字表示
        String rankTitle = "历史浏览";//榜行标题
        Integer viewlistNum = 10;//页面商品显示的个数(默认显示10)
        BoardDao boardDao = (BoardDao) getBean(servletContext, "boardDao");
        Board board = boardDao.getBoardByName(thetype);
        if(null != board && null != board.getAmount()){
           viewlistNum = board.getAmount();
         rankTitle = board.getTitle();
        }
        GoodsDao goodsDao = (GoodsDao) getBean(servletContext, "goodsDao");
        int viewHistoryNum = 0 ;
        for (int i=cookies.length-1;i>0;i-- ) {//倒序排列
         if(viewlistNum == viewHistoryNum){//等于后台设置显示数目时不在显示
          break;
         }
            if (cookies[i].getName().startsWith(HISTORY_PRE)) {
                String goodsId = cookies[i].getValue();
                if (goodsId == null || goodsId.trim().length()<1) {
                    continue;
                }
                Long goodsId2 = Long.valueOf(goodsId);
                Goods goods = new Goods();
       try {
         goods = goodsDao.getGoods(goodsId2);
       } catch (Exception e) {
         e.printStackTrace();
       }
                RankGoods hgs = new RankGoods();
                hgs.setGoodsId(String.valueOf(goods.getId()));//商品Id
                ............;
                list.add(hgs);
                viewHistoryNum ++ ;
            }
        }
        return list;
    }

}

分享到:
评论

相关推荐

    cookie学习练习记录

    下次用户访问时,网站可以通过检查Cookie来识别用户已浏览过的图片,从而提供个性化的用户体验,如显示未看过的图片或者按照浏览历史排序。 然而,随着前后端分离的普及,Cookie的使用的确有所减少。在传统的Web...

    thinkphp浏览历史功能实现方法

    在ThinkPHP框架中实现浏览历史功能主要依赖于Cookie技术,因为Cookie可以存储用户在不同页面间的访问信息。以下将详细讲解如何在ThinkPHP中实现这一功能。 首先,我们需要在用户访问特定页面(如产品或新闻页面)时...

    zencart最近浏览

    - 当用户在商店浏览商品时,系统会跟踪这些浏览历史,并将其存储在用户的会话或者cookie中。 - 用户无需登录即可看到最近浏览商品,但登录后,他们的浏览历史可以跨设备、跨会话持久化,提供更个性化的购物体验。 ...

    IE历史记录查看器

    IE历史记录查看器是一款专门针对Internet Explorer浏览器设计的工具,它允许用户查看并分析浏览器的内部活动,包括网页浏览记录、COOKIE信息以及密码保存记录等。这款工具对于需要检查个人或他人浏览历史的用户,...

    PHP Cookei记录用户历史浏览信息的代码

    本文将深入探讨如何使用Cookie记录用户的历史浏览信息,并提供一个具体的代码示例。 1. **Cookie的基本使用** 在PHP中,我们可以使用`$_COOKIE`全局变量来获取已设置的Cookie值。例如,要获取名为`RecordLuHuiDUDU...

    php相关的社区商品管理系统

    - 商品查询与展示:系统应能按需检索商品并显示其详细信息,包括当前价格。 - 价格历史记录:保存价格变动的历史记录,便于追溯和审计。 3. **在线留言功能**: - 用户评论:社区成员可以对商品发表评论,提供...

    基于ASP的因子ASP网上商店系统GShop.zip

    2. **商品展示**:商品信息存储在数据库中,ASP脚本负责从数据库检索商品信息,并将其显示在网页上,同时可以实现商品的排序、过滤和推荐。 3. **购物车**:ASP实现购物车功能,用户可以将选择的商品添加到购物车,...

    IECookiesView

    Cookie是网站在用户计算机上存储的小型文本文件,用于跟踪用户的浏览历史、登录状态和其他个性化设置。这款工具可以帮助用户深入了解和控制他们的在线隐私。 在深入探讨IECookiesView的功能之前,我们先了解一下...

    session详解

    通过在服务器端存储用户状态信息,并通过客户端cookie传递会话ID,可以实现对用户行为的跟踪和个性化服务。尽管session机制已被广泛采用,但仍需注意其潜在的问题,如安全性和并发访问等问题。理解和正确使用session...

    在线订餐II

    - 支持按多种方式进行排序,例如按浏览量排序,可以使用 SQL 的 ORDER BY 子句实现。 #### 3.3 分页显示 - 分页查询是提高用户体验的重要手段之一。可以通过限制每页显示的数据数量来实现分页。 - 在后端,使用 ...

    淘淘汽配网上商城:客户端可以注册登录,搜索商品,添加购物车,结算提交订单等功能,还有轮播图等等,服务端可以管理各种信息

    客户端功能涵盖了用户从浏览到购买的全过程,包括注册登录、商品搜索、购物车管理和订单提交等关键环节,同时提供了吸引用户的轮播图展示。服务端则承担了后台管理职责,确保整个系统的稳定运行和信息的有效管理。 ...

    基于JSP+Servlet+Bean的超市账单管理系统

    - 分页和排序:为了便于浏览大量数据,系统可能会实现分页查询功能,以及根据各种条件(如日期、金额等)对账单进行排序。 - 安全性:可能使用session和cookie来管理用户登录状态,防止未授权访问。 - 错误处理:...

    在线购物系统

    推荐系统则根据用户的购物历史、浏览行为、喜好等数据,推送相关或热门的商品,提升用户体验和转化率。 6. **安全性与隐私保护**:在线购物系统必须遵守数据保护法规,确保用户数据的安全和隐私。这涉及到数据加密...

    网上购物系统代码及数据库

    网上购物系统,也被称为网上商城,是现代电子商务的重要组成部分,它允许用户在互联网上浏览商品、下订单并完成支付过程。这个系统通常包括前端界面、后端服务、数据库管理和安全机制等多个方面。以下是对该系统及其...

    计算广告学讲义第三讲 展示广告检索

    - **淘宝联盟**:利用阿里巴巴集团内的海量商品信息和用户购买行为数据,实现精准的商品推荐广告。 #### 展示广告市场对比 - **传统广告**:通常采用大规模覆盖的方式,难以针对个人兴趣进行定制。 - **展示广告**...

    javascript编程

    这对于创建具备历史浏览功能的Web应用非常重要。 #### 十一、layer对象的动态展示 layer对象与CSS定位相结合,可以实现页面元素的动态定位和动画效果。掌握layer对象的属性和方法,有助于创建更生动的视觉体验。 ...

    特别好用的搜狗浏览器

    2. **无痕浏览**:为了保护用户的隐私,搜狗浏览器提供了无痕浏览模式,不记录用户的浏览历史、缓存和Cookie。 3. **网页保存**:用户可以将网页保存为MHTML或HTML文件,便于离线阅读或备份。 4. **智能填表**:...

    公告发布系统VS2005 非IOC版

    - **状态管理**:保持用户会话中的公告信息,如当前显示的公告、用户的浏览历史等,可以使用Session或Cookie来实现。 - **安全性**:确保只有授权用户能发布和管理公告,可以使用ASP.NET的身份验证和授权机制。 - **...

    ecommerce

    通过分析用户的浏览历史和购买行为,可以使用JavaScript实现基于浏览器存储的Cookie或其他技术的推荐系统,为用户提供个性化的商品推荐。 在响应式设计方面,JavaScript 搭配CSS3可以帮助创建适应不同设备屏幕的...

Global site tag (gtag.js) - Google Analytics