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. java 常见异常(二)

    java.lang.ClassCastException: com.bjsxt.HomeWrok.oop.polymorphism.UP cannot be cast to com.bjsxt.Hom ...

  2. iOS多线程编程Part 3/3 - GCD

    前两部分介绍了NSThread.NSRunLoop和NSOperation,本文聊聊2011年WWDC时推出的神器GCD.GCD: Grand Central Dispatch,是一组用于实现并发编程 ...

  3. C# list 去重

    /// <summary> /// 汽车商标 获取 /// Redis Key=zgqp315_Redis_TrademarkC_List /// </summary> /// ...

  4. [转载]关于安装Android Studio的一些问题的解决方法

    最近在研究Android编程,在Android Studio安装和使用时遇到了麻烦,从园子里找到了<关于安装Android Studio的一些问题的解决方法>的,很多问题找到了解决办法. ...

  5. p1205单词翻转-递归解决

    题目描述 Description 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入描述 Input Description 输入包括一个英语句子. 输出描述 Output Descripti ...

  6. C#笔记2:重构

    转: 最常用的重构指导 参考:http://www.cnblogs.com/KnightsWarrior/archive/2010/06/30/1767981.html,本文示例代码多来自此处: 参考 ...

  7. Unit Test Generator

           

  8. libcurl编程学习

    一.curl简介 curl是一个利用URL语法在命令行方式下工作的文件传输工具.它支持的协议有:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...

  9. 为什么乱码:<meta http-equiv="content-type">前的非ANSI字符

    为什么乱码:<meta http-equiv="content-type">前的非ANSI字符 浏览器检测网页字符集的默认顺序 浏览器的网页字符集检测顺序通常是: ch ...

  10. sql server2012 动态端口

    我们查询  exec sp_readerrorlog 0, 1, "listening" 时可以看有端口监听,有1433 1434 53698等. 这时我们可以打看配置管理器,查看 ...