http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3738|回复: 4

[C#语言基础] 添加到cookie中数据有没有排序规则

[复制链接]
发表于 2013-1-11 10:38:53 | 显示全部楼层 |阅读模式
在向cookie插入数据,那么cookie中的数据读取出来的顺序怎么和插入的数据顺序不一样啊,你看我之前插入的数据顺序见附件);那cookie中数据的排序是不是有一种规则啊
11111.jpg


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-1-11 10:47:04 | 显示全部楼层
这个应该不影响你开发吧
 楼主| 发表于 2013-1-11 10:53:37 | 显示全部楼层
admin 发表于 2013-1-11 10:47
这个应该不影响你开发吧

如果我用cookie来存储浏览过的商品,读取cookie中的数据是不是应该和浏览的顺序一样啊,应为我可能只读出cookie中前5条数据
发表于 2013-1-11 11:29:11 | 显示全部楼层
这个你可以选择自己读取后排序,或者存储Json数据
你说的这个有例子如下:
[code=csharp]

//商品历史浏览记录

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.getName().startsWith(HISTORY_PRE)) {
                 String getnewgoodsId = cookies.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.getName().startsWith(HISTORY_PRE)) {
                String goodsId = cookies.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;
    }

}
[/code]
 楼主| 发表于 2013-1-11 14:58:36 | 显示全部楼层
admin 发表于 2013-1-11 11:29
这个你可以选择自己读取后排序,或者存储Json数据
你说的这个有例子如下:

谢谢
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-3 06:51

© 2014-2021

快速回复 返回顶部 返回列表