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"))) { } 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的读取次数。
看完了上面的代码,我们再来看看另外一块比较合乎规范的代码:
|
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> 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(">", ">"); 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 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当中,可以存储更多的信息,也更加健壮。在开发过程中要不断的学习,精益求精,否则即使工作时间再长,也只是增加了干活儿的熟练程度罢了,并不能获得真正的能力提高。
本文出自 “鲲鹏击浪” 博客,请务必保留此出处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服务器保存在用户浏览器(客户端)上的小文件,它可以包含用户信息,用户操作信息等等,无论何时访问服务器,只要同源,就能携带到服务端 常见方式 一般:请求一个接 ...
随机推荐
- 图解Spark API
初识spark,需要对其API有熟悉的了解才能方便开发上层应用.本文用图形的方式直观表达相关API的工作特点,并提供了解新的API接口使用的方法.例子代码全部使用python实现. 1. 数据源准备 ...
- Xamarin技术文档------VS多平台开发
此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简 ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- Egret3D 研究报告(一)初试
了解的朋友应该知道我最近一直都在鼓吹webgl. 今天有一点时间,加了一个Egret3D的群,就开始了这个坑. 耳听为虚,眼见为实.让我们荡起双桨,一起去刷一下egret 打开姿势 至于以什么姿势打开 ...
- 用java开发微信公众号:公众号接入和access_token管理(二)
本文为原创,原始地址为http://www.cnblogs.com/fengzheng/p/5027630.html 上一篇说了微信开发的准备工作,准备工作完成之后,就要开始步入正题了.其实微信公众号 ...
- 如何在腾讯开放平台的云服务器上安装php和memcache 一
由于被通知腾讯的CEE要关闭了,必须自己切换到服务器,自己装php.烦到一个B. 首先找到官方wiki: http://wiki.qcloud.com/wiki/SUSE%E7%8E%AF%E5%A2 ...
- MySQL基础之存储过程
学过之后却没有总结,今天好不容易有点时间来看看. 存储过程的优势 1.简化复杂的SQL语句,将多个SQL语句封装成为一个存储过程,可以在其中加上一些流程控制语句 2.存储过程封装在数据库内部,编译之后 ...
- 警告: [unchecked] 对作为原始类型IScheme的成员的write(TProt ocol,T)的调用未经过检查
jdk 从8 改成了7 就好了! 或者, 修改源码, 每个响应的地方加上 surppressingWarnings xxx , 或者使用 请使用 -Xlint:unchecked 重新编译. 参照 h ...
- WCF学习之旅—第三个示例之一(二十七)
一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书 ...
- 透视 HTML子元素的margin-top样式会应用在父元素上的原由
情况说明 当对页面中元素设置margin-top样式时,如果该元素有父元素,则margin-top会应用与父元素,子元素的top与父元素的top重叠.举例说明 <style>body{ma ...