cookie存储对象信息
最近看到某公司某项目中用于保存多个城市信息到cookie中的方法,该方法的逻辑是按时间顺序记录最近访问过的三个城市的名字及id,逻辑包插入与含排重。插入与排重的代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |                  获取cityid与cityname                   if(cityid == Utility.TypeParse.ToInt(CookieHelper.get("fwid1")))                {                                   }                elseif(cityid == Utility.TypeParse.ToInt(CookieHelper.get("fwid2")))                {                    //CookieHelper.set("fwname3", CookieHelper.get("fwname2"), 10);                    CookieHelper.set("fwname2", CookieHelper.get("fwname1"), 10);                    CookieHelper.set("fwname1", HttpUtility.UrlEncode(cityname), 10);                    //CookieHelper.set("fwid3", CookieHelper.get("fwid2"), 10);                    CookieHelper.set("fwid2", CookieHelper.get("fwid1"), 10);                    CookieHelper.set("fwid1", cityid.ToString(), 10);                }                elseif(cityid == Utility.TypeParse.ToInt(CookieHelper.get("fwid3")))                {                    CookieHelper.set("fwname3", CookieHelper.get("fwname2"), 10);                    CookieHelper.set("fwname2", CookieHelper.get("fwname1"), 10);                    CookieHelper.set("fwname1", HttpUtility.UrlEncode(cityname), 10);                    CookieHelper.set("fwid3", CookieHelper.get("fwid2"), 10);                    CookieHelper.set("fwid2", CookieHelper.get("fwid1"), 10);                    CookieHelper.set("fwid1", cityid.ToString(), 10);                }                else                {                    //没有相等的                    CookieHelper.set("fwname3", CookieHelper.get("fwname2"), 10);                    CookieHelper.set("fwname2", CookieHelper.get("fwname1"), 10);                    CookieHelper.set("fwname1", HttpUtility.UrlEncode(cityname), 10);                    CookieHelper.set("fwid3", CookieHelper.get("fwid2"), 10);                    CookieHelper.set("fwid2", CookieHelper.get("fwid1"), 10);                    CookieHelper.set("fwid1", cityid.ToString(), 10);                } | 
点评:对于存储的中文信息需要编码,否则在部分浏览器无法存储,这是这段代码可以肯定的地方。但对于同类信息用到了六个cookie,反复的存取降低了代码的效率,最好存储在一个cookie中。另外即使考虑到数据量不大采用上面的方法,对于单个cookie最好先获取cookie中的值到一个变量当中,在需要读取cookie值的地方利用该变量即可,这样可以降低对cookie的读取次数。
看完了上面的代码,我们再来看看另外一块比较合乎规范的代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |    /// <summary>       /// 添加一对名称地址到cookie中       /// </summary>       /// <param name="name">地址名称</param>       /// <param name="url">地址url</param>       publicstaticvoidAddKeyWord(stringname, stringurl, stringdetailName="",inti = 0,stringshortDomain)        {            List<KeyWord> kwLists = newList<KeyWord>();                        if(string.IsNullOrEmpty(name) || string.IsNullOrEmpty(url)||name.Trim().ToLower()=="null")                return;            HttpContext context = System.Web.HttpContext.Current;            name = context.Server.UrlDecode(name);            cookieName = baseCookieName + shortDomain;            stringkw = ClientCookie.Get(cookieName);            if(name.IndexOf("%") > -1 || name.IndexOf("%") > -1)            {                name = context.Server.UrlDecode(name);                if(name.IndexOf("%") > -1 || name.IndexOf("%") > -1)                    return;            }            name = name.Replace(">", ">");            name = name.Replace("<", "<");            name = name.Replace(" ", " ");            name = name.Replace("\"", """);            name = name.Replace("\'", "'");            name = name.Replace("\\", "\\\\");//对斜线的转义            name = name.Replace("\n", "\\n");            name = name.Replace("\r", "\\r");            if(!string.IsNullOrEmpty(kw))            {                try                {                    kwLists = JsonConvert.DeserializeObject<List<KeyWord>>(kw);                }                catch(Exception ex)                {                    LogerHelper.WriteMessegeError(kw, "解析出错");                }                foreach(KeyWord myKey inkwLists)                {                    if(name.Trim()==myKey.name.Trim()||myKey.url == url.Trim().ToLower())                    {                        return;                    }                }                               if(kwLists.Count >= 3)                {                    kwLists.RemoveAt(0);                }                          }            kwLists.Add(newKeyWord() { name = name.Trim(), url = url.Trim(), sort = i, detailName = detailName });                      ClientCookie.Set(cookieName,JsonConvert.SerializeObject(kwLists),3,shortDomain);                       } | 
点评:上面的方法将一个序列化的对象集合存储在cookie当中,可以存储更多的信息,也更加健壮。在开发过程中要不断的学习,精益求精,否则即使工作时间再长,也只是增加了干活儿的熟练程度罢了,并不能获得真正的能力提高。
本文出自 “鲲鹏击浪” 博客,请务必保留此出处http://8907792.blog.51cto.com/8897792/1837185
cookie存储对象信息的更多相关文章
- Redis 存储对象信息是用 Hash 还是 String
		Redis 内部使用一个 RedisObject 对象来表示所有的 key 和 value,RedisObject 中的 type,则是代表一个 value 对象具体是何种数据类型,它包含字符串(St ... 
- 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能
		原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ... 
- JavaScript一个cookie存储的类
		所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localSt ... 
- js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总
		在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要. 什么是Cookie 所谓Cookie,只是一条极为短小的信息, ... 
- java 存储对象
		一.存储区域: 1)寄存器.这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何 ... 
- 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)
		新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ... 
- 电影管理器之XML存储电影信息数据
		电影管理器之XML存储电影信息数据 但凡管理器之类的软件,存储数据是必不可少的.存储数据的话,有几种选择.一是用数据库,把数据存储到数据库里:一是用文本文件,把数据存储到文本文件里:一种是利用XML文 ... 
- localstorage存储对象
		之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem(" ... 
- 不使用cookie记录用户信息
		cookie是什么: cookie是由web服务器保存在用户浏览器(客户端)上的小文件,它可以包含用户信息,用户操作信息等等,无论何时访问服务器,只要同源,就能携带到服务端 常见方式 一般:请求一个接 ... 
随机推荐
- C#事件-使用事件需要的步骤
			事件是C#中另一高级概念,使用方法和委托相关.奥运会参加百米的田径运动员听到枪声,比赛立即进行.其中枪声是事件,而运动员比赛就是这个事件发生后的动作.不参加该项比赛的人对枪声没有反应. 从程序员的角度 ... 
- redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
			前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value 就是具体的customerid集合, ... 
- 12个小技巧,让你高效使用Eclipse
			集成开发环境(IDE)让应用开发更加容易.它们强调语法,让你知道是否你存在编译错误,在众多的其他事情中允许你单步调试代码.像所有的IDE一 样,Eclipse也有快捷键和小工具,这些会让您感觉轻松许多 ... 
- 按照Enterprise Integration Pattern搭建服务系统
			在前一篇文章中,我们已经对Enterprise Integration Pattern中所包含的各个组成进行了简单地介绍.限于篇幅(20页Word以内),我并没有深入地讨论各个组成.但是如果要真正地按 ... 
- 锤子OneStep及BigBang使用体验
			令人期待的Smartisan OS v3.1.2终于推送了,第一时间下载了更新.几乎花了半个小时才升级完毕,捧着还热乎的手机,赶忙体验一下传说中的两大杀器:OneStep以及BigBang. 先说On ... 
- 锋利的jQuery--jQuery事件,动画(读书笔记二)
			1.注意$(document).ready()方法和window.onload方法之间的细微区别 $(document).ready()在DOM树构建完成就会执行,而window.onload是在DO ... 
- NotePad++中JSLint的使用
			1.第一步下载Notepad++ 2.安装JSLint插件 3.运行JSlint 4.前提是你设置了当前语言或者本身文件就是js 5.JSLint的作用主要就是检查你的JS的规则正确性(至少是绝大部分 ... 
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
			系列目录 我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能! 服务器 现在来向SQL2008R2插入1000000条数据吧 declare @i int; ; beg ... 
- Android数据加密之Aes加密
			前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ... 
- SharePoint 2013 configure and publish infopth
			This article will simply descript how to configure and publish a InfoPath step by step. Note: To con ... 
