转自:http://blog.csdn.net/xjzdr/archive/2009/04/24/4105814.aspx
在登录时要保存的用户信息的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FGTWeb.Model
{
/// <summary>
/// 在登录时需要保存到Cookie中的信息,属性不够时,以自行添加
/// </summary>
[Serializable]
public class M_Login
{
private string _用户id;
private string _工号;
private string _姓名;
private string _用户名;
private string _密码;
private int _当前机构id;
private int _工种id;
private string _工种名称;
private string _机构名称;
private int _父机构ID;
private string _父机构名称;
private string _用户登录IP;
private string _角色id;
private string _角色名称;
private string _权限;
private int _主岗位id;
private string _附岗位id;
private string _主岗位名称;
private string _电子邮件;
/// <summary>
///
/// </summary>
public string 用户ID
{
set { _用户id = value; }
get { return _用户id; }
}
/// <summary>
///
/// </summary>
public string 工号
{
set { _工号 = value; }
get { return _工号; }
}
/// <summary>
///
/// </summary>
public string 姓名
{
set { _姓名 = value; }
get { return _姓名; }
}
/// <summary>
///
/// </summary>
public string 用户名
{
set { _用户名 = value; }
get { return _用户名; }
}
/// <summary>
///
/// </summary>
public string 密码
{
set { _密码 = value; }
get { return _密码; }
}
/// <summary>
///
/// </summary>
public int 当前机构ID
{
set { _当前机构id = value; }
get { return _当前机构id; }
}
/// <summary>
///
/// </summary>
public string 电子邮件
{
set { _电子邮件 = value; }
get { return _电子邮件; }
}
/// <summary>
///
/// </summary>
public int 工种ID
{
set { _工种id = value; }
get { return _工种id; }
}
/// <summary>
///
/// </summary>
public string 工种名称
{
set { _工种名称 = value; }
get { return _工种名称; }
}
/// <summary>
///
/// </summary>
public string 机构名称
{
set { _机构名称 = value; }
get { return _机构名称; }
}
public int 父机构ID
{
set { _父机构ID = value; }
get { return _父机构ID; }
}
public string 父机构名称
{
set { _父机构名称 = value; }
get { return _父机构名称; }
}
/// <summary>
///
/// </summary>
public string 用户登录IP
{
set { _用户登录IP = value; }
get { return _用户登录IP; }
}
/// <summary>
/// 一个用户可能属于多个角色,是角色ID的列表
/// </summary>
public string 角色id
{
set { _角色id = value; }
get { return _角色id; }
}
/// <summary>
/// 一个用户可能属于多个角色,是角色名称的列表
/// </summary>
public string 角色名称
{
set { _角色名称 = value; }
get { return _角色名称; }
}
public string 权限
{
set { _权限 = value; }
get { return _权限; }
}
public int 主岗位id
{
set { _主岗位id = value; }
get { return _主岗位id; }
}
public string 主岗位名称
{
set { _主岗位名称 = value; }
get { return _主岗位名称; }
}
/// <summary>
/// 可能有多个岗位,是多个ID的串,中间用,分开
/// </summary>
public string 附岗位id
{
set { _附岗位id = value; }
get { return _附岗位id; }
}
}
}
注意类前面的 [Serializable],表示该类可序列化。
将类序列化和批序列化的方法:
/// <summary>
/// 对类FGTWeb.Model.M_Login进行二进制序列化成一个字符串
/// </summary>
/// <returns>序列化代码</returns>
public static string BinarySerialize(FGTWeb.Model.M_Login model)
{
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
ser.Serialize(mStream, model);
byte[] buf = mStream.ToArray();
mStream.Close();
return ByteToStr(buf);
}
/// <summary>
/// 将从Cookie中取出的字符串反序列化成一个FGTWeb.Model.M_Login类
/// </summary>
/// <param name="binary"></param>
/// <returns></returns>
public static FGTWeb.Model.M_Login DeSerialize(string strLoginUserModel)
{
byte[] binary = strToByte(strLoginUserModel);
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream(binary);
FGTWeb.Model.M_Login o = (FGTWeb.Model.M_Login)ser.Deserialize(mStream);
mStream.Close();
return o;
}
登录页面的代码:
if (model_LoginUser != null)//用户身份验证成功
{
string strLoginUserMode = FGTWeb.BLL.BLL_Login.BinarySerialize(model_LoginUser);
HttpCookie a = new HttpCookie("model_LoginUser");
a.Value = strLoginUserMode;
Response.Cookies.Add(a);
}
在其它的页面获取用户登录的信息(将cookie中的类反序列化):
string aa = Request.Cookies["model_LoginUser"].Value.ToString();
FGTWeb.Model.M_Login model_LoginUser_Test = new FGTWeb.Model.M_Login();
model_LoginUser_Test = FGTWeb.BLL.BLL_Login.DeSerialize(aa);
string strtr = "姓名:" + model_LoginUser_Test.姓名 + "(" + model_LoginUser_Test.用户名+")" + " 角色:" + model_LoginUser_Test.角色名称 + " 机构:" + model_LoginUser_Test.机构名称 + " 上级:" + model_LoginUser_Test.父机构名称;
this.Label1.Text = strtr;
strtr中可以显示登录用户的信息了。
下面的代码更方便,可以任何的对象序列化和反序列化,上面的类的序列化只是一种情况而已:
//序列化
public static string BinarySerialize(Object obj)
{
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
ser.Serialize(mStream, obj);
byte[] buf = mStream.ToArray();
mStream.Close();
return ByteToStr(buf);
}
//反序列化
/// <summary>
/// 反序列化对象
/// </summary>
/// <param name="strLoginUserModel"></param>
/// <returns></returns>
public static object DeSerialize2(string strLoginUserModel)
{
byte[] binary = strToByte(strLoginUserModel);
BinaryFormatter ser = new BinaryFormatter();
MemoryStream mStream = new MemoryStream(binary);
object obj = new object();
obj = (object)ser.Deserialize(mStream);
mStream.Close();
return obj;
}
调用方法:
//序列化
string strLoginUserMode = FGTWeb.BLL.BLL_Login.BinarySerialize(model_LoginUser);
HttpCookie a = new HttpCookie("model_LoginUser");
a.Value = strLoginUserMode;
Response.Cookies.Add(a);
//测试反序列化
string aa = Request.Cookies["model_LoginUser"].Value.ToString();
FGTWeb.Model.M_Login model_LoginUser_Test = new FGTWeb.Model.M_Login();
model_LoginUser_Test = (FGTWeb.Model.M_Login)FGTWeb.BLL.BLL_Login.DeSerialize2(aa);
string strtr = "登录用户名:" + model_LoginUser_Test.用户名 + ",登录角色:" + model_LoginUser_Test.角色名称 + ",所在机构:" + model_LoginUser_Test.机构名称 + ",上级机构:" + model_LoginUser_Test.父机构名称;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xjzdr/archive/2009/04/24/4105814.aspx