cookie存储对象信息

最近看到某公司某项目中用于保存多个城市信息到cookie中的方法,该方法的逻辑是按时间顺序记录最近访问过的三个城市的名字及id,逻辑包插入与含排重。插入与排重的代码如下:

                 获取cityid与cityname
   
                if (cityid == Utility.TypeParse.ToInt(CookieHelper.get("fwid1")))
                {
                   
                }
                else if (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);
                }
                else if (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的读取次数。

看完了上面的代码,我们再来看看另外一块比较合乎规范的代码:

   /// <summary>
       /// 添加一对名称地址到cookie中
       /// </summary>
       /// <param name="name">地址名称</param>
       /// <param name="url">地址url</param>
       public static void AddKeyWord(string name, string url, string detailName="",int i = 0,string shortDomain)
        {
            List<KeyWord> kwLists = new List<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;
            string kw = 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(">", "&gt;");
            name = name.Replace("<", "&lt;");
            name = name.Replace(" ", "&nbsp;");
            name = name.Replace("\"", "&quot;");
            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 in kwLists)
                {
                    if (name.Trim()==myKey.name.Trim()||myKey.url == url.Trim().ToLower())
                    {
                        return;
                    }
                }
               
                if (kwLists.Count >= 3)
                {
                    kwLists.RemoveAt(0);
                }
              
            }

            kwLists.Add(new KeyWord() { name = name.Trim(), url = url.Trim(), sort = i, detailName = detailName });
      
                ClientCookie.Set(cookieName,JsonConvert.SerializeObject(kwLists),3,shortDomain);
           
            }

点评:上面的方法将一个序列化的对象集合存储在cookie当中,可以存储更多的信息,也更加健壮。在开发过程中要不断的学习,精益求精,否则即使工作时间再长,也只是增加了干活儿的熟练程度罢了,并不能获得真正的能力提高。

时间: 2024-08-10 00:03:41

cookie存储对象信息的相关文章

cookie存储对象或数组

问题: 保存的cookie用firefox怎么刷新都刷不出来,而把cookie的值改为字符串或数字时正常,果断把数据源用json编码,然后存储,果然出来了. 解决方法: 在保存cookie值为对象或数组时,最好用json编码. cookie存储对象或数组

在Cookie中存储对象

背景介绍 做项目过程中,用户登陆之后,需要将用户的信息存到Cookie中,但因为Cookie中只能存储字符串,所以想到了先把用户实体序列化成Json串,存储在Cookie中,用到的时候再拿出来反序列化. 道理很简单,网上的例子也很多,但还是遇到一些小困难.下面与大家分享成果.(我的开发环境为VS2012,.net framework版本为4.0,) C#中Json与对象之间的互相转换 下载并引用Newtonsoft.Json.dll 定义一个简单的用户实体: public class UserI

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一个接收动态添加div的容器 <div> 功能区域 <br /> <input id="1" type="checkbox" value="新闻" name="11" />新闻 <input id="2" type="checkbox"

JavaScript一个cookie存储的类

所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localStorage和sessionStorage一样存储API,不同的是,基于http cookie实现它 */ function cookieStorage( maxage , path ){ //两个参数分别代表存储有效期和作用域 //获取一个存储全部cookie信息的对象 this.cookie = (func

cookie存储

由于HTTP协议是地域无关的,所以用户经常使用cookies作为持久存储.URL加载系统提供接口来创建和管理cookies,发送cookies作为http请求的一部分,当收到服务端响应时获取cookies. OS X和iOS提供NSHTTPCookieStorage类,这个类提供管理NSHTTPCookie对象集合的接口.OS X中,所以应用共享cookies:ios中每个应用管理自己的cookies. 相关章节:cookie存储 版权声明:本文为博主原创文章,未经博主允许不得转载.

JAVA之IO技术相关Properties类 存储配置文件信息

package ioTest.io3; /* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOu

localstorage存储对象

之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem("key","value");//存储变量名为key,值为value的变量 localStorage.key = "value"//存储变量名为key,值为value的变量 localStorage.getItem("key");//获取存

java 存储对象

一.存储区域: 1)寄存器.这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. 2)栈.位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持.推栈指针若向下移动,则分配新的内存:若向上移动,则释放那些内存.这是一种快速有效的分配存储方法,仅次于寄存器.创建程序时,Java系统必须知道存储在栈内所有项的确切生命周期,以便上下移动堆栈指针.这一约束

js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总

在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要.   什么是Cookie 所谓Cookie,只是一条极为短小的信息,它被浏览器自动地放置在访问用户的电脑硬盘中. 例如:C:\Users\[user]\AppData\Roaming\Microsoft\Windows\Cookies 如上图所示,打开的一个文件里面,标示了一个域下多个Cookie的信息. 检测/判断浏览器是否支持Cookie 在绝大多数浏览器中,可