C#中Cookie之存储对象

 更新时间:2015年07月21日 10:14:19   投稿:hebedich  
这篇文章主要介绍了在项目中,需要将用户的信息存到Cookie中,但是cookie只能保存字符串,所以需要先序列号,然后在存储在cookie中,有需要的朋友可以借鉴下

本文通过代码详细给大家做讲解,具体内容如下:

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

道理很简单,网上的例子也很多,但还是遇到一些小困难。下面与大家分享成果。(我的开发环境为VS2012,.net framework版本为4.0,)

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

下载并引用Newtonsoft.Json.dll

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

public class UserInfo
{
 /// <summary>
 /// 用户名称
 /// </summary>
 public string UserName { get; set; }
 /// <summary>
 /// 用户密码
 /// </summary>
 public string UserPwd { get; set; }
 /// <summary>
 /// 用户级别
 /// </summary>
 public string UserLevel { get; set; }
}


将对象序列化成Json串:

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


将Json串反序列化成对象:

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


Cookie的使用

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

//获取UserInfo对象

UserInfo enUser=new UserInfo()
{
 UserName="Danny",
 UserPwd="123456",
 UserLevel="admin"
}

//创建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中时会产生乱码,为了防止产生乱码,我们在存入Cookie之前先用UrlEncode()和UrlDecode()对Json串进行编码与解码。

而且,一般的浏览器支持的Cookie存储的容量为4k(差也就差一两个字节),足够存储一个经过序列化的对象了。

本文到此为止,希望大家喜欢。

相关文章

  • Asp.Net中MVC缓存详解

    Asp.Net中MVC缓存详解

    这篇文章主要介绍了Asp.Net中MVC缓存的种类区别等内容,一下来学习下。
    2017-12-12
  • c# 实现KMP算法的示例代码

    c# 实现KMP算法的示例代码

    这篇文章主要介绍了c# 实现KMP算法的示例代码,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-11-11
  • C#播放背景音乐的方法小结

    C#播放背景音乐的方法小结

    这篇文章主要介绍了C#播放背景音乐的方法,实例总结了C#播放背景音乐的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#实现飞行棋优化版

    C#实现飞行棋优化版

    这篇文章主要为大家详细介绍了C#实现飞行棋的优化版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C#实现通过程序自动抓取远程Web网页信息的代码

    C#实现通过程序自动抓取远程Web网页信息的代码

    C#实现通过程序自动抓取远程Web网页信息的代码...
    2007-04-04
  • C#中使用FilleStream实现视频文件的复制功能

    C#中使用FilleStream实现视频文件的复制功能

    这篇文章主要介绍了C#中使用FilleStream实现视频文件的复制功能,本文通过实例代码给大家介绍的非常想详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • C# 全角和半角转换以及判断的简单代码

    C# 全角和半角转换以及判断的简单代码

    这篇文章介绍了在C#中判断和转换全角半角的方法,有需要的朋友可以参考一下
    2013-07-07
  • 基于一个应用程序多线程误用的分析详解

    基于一个应用程序多线程误用的分析详解

    本篇文章是对一个应用程序多线程的误用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#中的扩展方法详解

    C#中的扩展方法详解

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。
    2014-09-09
  • C#微信开发之自定义菜单管理

    C#微信开发之自定义菜单管理

    本文主要介绍了C#微信开发中自定义菜单管理的相关知识,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-02-02

最新评论