1.创建一个新的cookie,并赋值。 
HttpCookie cookie; 
      cookie=new HttpCookie("user"); 
      cookie.Domain = AppConfig.DomainName; 
      cookie.Values.Add("Username",username); 
      cookie.Values.Add("ldapStr",FindUserlist.Table.Rows[0]["ldapStr"].ToString());
      Response.AppendCookie(cookie);
2.获取cookie的值
 HttpCookie cookie=Request.Cookies["user"]; 
    if(cookie!=null) 
    { 
         string username = cookie["Username"]; 
         string ldapStr = cookie["ldapStr"]; 
    } 
3、写Cookie 值
HttpCookie myCookie = new HttpCookie("CookieName");  
myCookie.Values.Add("CookieItem1","CookieItem1Value");  
myCookie.Values.Add("CookieItem2","CookieItem2Value");  
myCookie.Expires = DateTime.Now.AddDays(30);  
Response.AppendCookie(myCookie);

4、清除Cookie值HttpCookie myCookie = HttpContext.Current.Response.Cookies["CookieObjectName"]; 
if(myCookie != null)  
myCookie.Expires = DateTime.Now;

在做项目过程中,用户登陆之后,需要将用户的信息存到Cookie中,但因为Cookie中只能存储字符串,所以想到了先把用户实体序列化成Json串,存储在Cookie中,用到的时候再拿出来反序列化。

C#中Json与对象之间的互相转换

下载并引用Newtonsoft.Json.dll

定义一个简单的用户实体:

  1. public class UserInfo
  2. {
  3. /// <summary>
  4. /// 用户名称
  5. /// </summary>
  6. public string UserName { get; set; }
  7. /// <summary>
  8. /// 用户密码
  9. /// </summary>
  10. public string UserPwd { get; set; }
  11. /// <summary>
  12. /// 用户级别
  13. /// </summary>
  14. public string UserLevel { get; set; }
  15. }

将对象序列化成Json串:

  1. /// <summary>
  2. /// 将对象序列化成Json
  3. /// </summary>
  4. /// <param name="obj">需要序列化的对象</param>
  5. /// <returns>序列化后的字符串</returns>
  6. public static string ObjectToJson(object obj)
  7. {
  8. return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  9. }

将Json串反序列化成对象:

  1. /// <summary>
  2. /// 从Json字符串反序列化为对象
  3. /// </summary>
  4. /// <param name="jsonString">Json字符串</param>
  5. /// <param name="obj">要生成的对象类型</param>
  6. /// <returns>反序列化后的对象</returns>
  7. public static object JsonToObject(string jsonString)
  8. {
  9. return Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(jsonString);
  10. }

Cookie的使用

将实体序列化为Json并存入Cookie中:

//获取UserInfo对象

  1. UserInfo enUser=new UserInfo()
  2. {
  3. UserName="Danny",
  4. UserPwd="123456",
  5. UserLevel="admin"
  6. }

//创建Cookie对象
HttpCookie userInfo = new HttpCookie("userInfo");

//将序列化之后的Json串以UTF-8编码,再存入Cookie
userInfo.Value = HttpUtility.UrlEncode(ObjectToJson(enUser), Encoding.GetEncoding("UTF-8"));

//将cookie写入到客户端
System.Web.HttpContext.Current.Response.SetCookie(userInfo);

//设置cookie保存时间
userInfo.Expires = DateTime.Now.AddMinutes(20);
从Cookie中读取出Json串并反序列化成实体

//取出Cookie对象
HttpCookie userInfoCookie = System.Web.HttpContext.Current.Request.Cookies.Get("userInfo");

//从Cookie对象中取出Json串
string strUserInfo = HttpUtility.UrlDecode(userInfoCookie.Value, Encoding.GetEncoding("UTF-8"));

//Json串反序列化为实体
UserInfoViewModel userInfo = JsonToObject(strUserInfo) as UserInfoViewModel;

Cookie的具体使用之来存储对象的更多相关文章

  1. localstorage存储对象

    之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem(" ...

  2. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  3. JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习

    JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...

  4. mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

    mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

  5. Token和SessionStorage(会话存储对象)

    sessionStorage数据只在当前标签页共享 存在本地   关闭浏览器后会清除数据(关闭标签页不会清楚) localStorage数据会存在浏览器中  浏览器关了数据也还在 只有清除缓存才会消失 ...

  6. localStorage存储对象,sessionStorage存储数组对象

    前言 最近在用angular做商城购物车的功能模块,因为angular的watch监听,数据只要发生变化就能很方便的自动渲染页面.但随即出现的问题是,之前用户操作的样式都会被重置掉. 例如我勾选了几个 ...

  7. 【Java】链表中存储对象的问题

    更新: 在一次搜索“变量声明在循环体内还是循环体外”问题时,碰见了一个这样的代码,与本文类似,代码如下: Document [] old ......//这是数据源 EntityDocument[] ...

  8. Qt中容器类应该如何存储对象(对象加入到容器时会发生拷贝,容器析构时,容器内的对象也会析构)

    Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...

  9. redis存储对象

      redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列 ...

随机推荐

  1. VirtualBox虚拟机安装MSDOS和MINIX2.0.0双系统

    1. 在VirtualBox中新建一个MSDOS虚拟机. 2.下载一个MSDOS软盘镜像. 3.启动虚拟机,提示选择安装盘时,选择步骤2下载过来的MSDOS镜像. 4.正常启动进入DOS命令行,用FD ...

  2. STM32普通定时器实现延时函数

    /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1u ...

  3. 小兵眼中的Java Struts2

        老魏终于可以回园子了,但是这次要慢慢的回来,不能一下子回来,这段时间除了要照顾刚出生的小女儿,还要做项目.说实在的老魏时间真是有限,不能照顾到园子的文章了,所以只能慢慢的回来写文章了.抱歉! ...

  4. DB天气app冲刺二阶段第四天

    今天就进度来说没有丝毫进度..考虑直接把数据库文件弄到代码里.因为每次挑选城市的时候都有时会出bug ,所以我想明天试一下看看是不是这个的问题,虽然工程量有点大,但是应该不困难,所以明天试一下需要. ...

  5. iOS 10 因苹果健康导致闪退 crash-b

    如果在app中调用了苹果健康,iOS10中会出现闪退.控制台报出的原因是: Terminating app due to uncaught exception 'NSInvalidArgumentEx ...

  6. c语言编程之循环队列

    利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记.入队flag++,出队flag-- #include"stdio.h" typedef in ...

  7. WPF解析Fnt字体

    偶遇需要再 WPF中加载Fnt字体,此做... using System; using System.Collections.Generic; using System.Drawing; using ...

  8. 一个完整openlayer的例子,包括marker,popup等

    整理转自:http://www.blogjava.net/siriusfx/archive/2007/11/26/163104.html openlayers提供了几十个示例,虽然每个示例都很简单,但 ...

  9. 【转】欧拉回路&特殊图下的哈密顿回路题集

    转自:http://blog.csdn.net/shahdza/article/details/7779385 欧拉回路[HDU]1878 欧拉回路 判断3018 Ant Trip 一笔画问题1116 ...

  10. 【BZOJ】【1770】【Usaco2009 Nov】lights 灯

    高斯消元解XOR方程组 一眼看上去是高斯消元解xor方程组……但是不会写……sad 去膜拜了Hzwer和ZYF Hzwer啥也没说,还是zyf靠谱…… 当多解的时候就需要爆搜枚举自由元的情况,找最优解 ...