类序列化之后保存在COOKIES里
我们知道,在.NET中页面之间传值的方式有很多种,比如SESSION,COOKIES,Response.Redirect,URL等等;
具体用哪种方式要具体问题具体分析了,比如说就一个字段需要传到下一个页面,那么URL和Response.Redirect方式是不二选择;
如果对象较大的话,我们会考虑使用session,cookies,使用Session的话,在数据量大的时候有可能会造成IIS崩溃,导致站点无法访问,
那我们就使用COOKIES,有的朋友又会说,cookies容易丢失,确实是的,不过如果cookies用得好的话也不会丢失哦。
接下来我介绍将类对象序列化之后保存在COOKIES里。
在使用序列化之前,首先想一下,为什么要先将对象序列化然后写入COOKIES呢?不进行序列化就不行吗?序列化以后对象变成什么样子呢?
带着这几个问题我们来看看源代码:
首先创建类:其中[Serializable]标示该类可以被序列化
[Serializable]
public class mbmembers
{
public mbmembers()
{
}
#region "Private Variables"
private string _M_UserName; // 帐号
private string _M_RealName; // 真实姓名
private string _M_IDCard; // 证件号码
private string _M_Email; // 电子邮件信箱
private string _M_Mobile; // 手机号码
#endregion
#region "Public Variables"
/// <summary>
/// 帐号
/// </summary>
public string M_UserName
{
set { this._M_UserName = value; }
get { return this._M_UserName; }
}
/// <summary>
/// 真实姓名
/// </summary>
public string M_RealName
{
set { this._M_RealName = value; }
get { return this._M_RealName; }
}
/// <summary>
/// 证件号码
/// </summary>
public string M_IDCard
{
set { this._M_IDCard = value; }
get { return this._M_IDCard; }
}
/// <summary>
/// 电子邮件信箱
/// </summary>
public string M_Email
{
set { this._M_Email = value; }
get { return this._M_Email; }
}
/// <summary>
/// 手机号码
/// </summary>
public string M_Mobile
{
set { this._M_Mobile = value; }
get { return this._M_Mobile; }
}
#endregion
}
接下来提供序列化和反序列化的方法:
/// <summary>
/// 对类mbmembers进行二进制序列化成一个字符串
/// </summary>
/// <returns>序列化代码</returns>
public string BinarySerialize(mbmembers model)
{
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
ser.Serialize(mStream, model);
byte[] buf = mStream.ToArray();
mStream.Close();
return System.Text.Encoding.Default.GetString(buf);
}
/// <summary>
/// 将从Cookie中取出的字符串反序列化成一个mbmembers类
/// </summary>
/// <param name="binary"></param>
/// <returns></returns>
public mbmembers DeSerialize(string strLoginUserModel)
{
byte[] binary = System.Text.Encoding.Default.GetBytes(strLoginUserModel);
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream(binary);
mbmembers o = (mbmembers)ser.Deserialize(mStream);
mStream.Close();
return o;
}
将用户个人信息序列化之后 写入COOKIES:
mbmembers bs = new mbmembers();
Response.Cookies["userinfo"].Value = BinarySerialize(bs); //序列化
Response.Cookies["userinfo"].Expires = DateTime.MinValue;
string str= Request.Cookies["userinfo"].Value; //反序列化
mbmembers mb = DeSerialize(str);
以上是所有源代码,可能比较难看懂,首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public Product findProduct(int product_id);
注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。
不过此处,如果您不想序列化,而是直接将对象保存在COOKIES里面也是可以的,这就需要循环遍历对象里面的信息,将里面的信息拼接成字符串,然后存储在COOKIES中。