zoukankan      html  css  js  c++  java
  • 将Model(类)写入cookie,序列化与反序列化操作

    转自: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

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/wangpei/p/1522130.html
Copyright © 2011-2022 走看看