1、cookie类 CartCookie.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text;
using Zip;

/// <summary>
///Serializer 的摘要说明
/// </summary>
public class CartCookie
{
    public CartCookie()
    { }

    /// <summary>
    /// 将对象写入Cookie
    /// </summary>
    public static void CartToCookie(object obj, string cookieName)
    {

        string str = SerializeObject(obj);
        str = Convert.ToBase64String(ZipClass.Compress(str));//压缩字符串
        HttpCookie hc = new HttpCookie(cookieName);
        hc.Value = HttpContext.Current.Server.UrlEncode(str);
        hc.Expires = DateTime.Now.AddDays(7);
        HttpContext.Current.Response.Cookies.Add(hc);

    }

    /// <summary>
    /// 将Cookie反序列化为
    /// </summary>
    public static object CookieToCart(string cookieName)
    {
        if (HttpContext.Current.Request.Cookies[cookieName] == null)
        {
            return null;
        }
        else
        {
            string str = HttpContext.Current.Request.Cookies[cookieName].Value;
            str = HttpContext.Current.Server.UrlDecode(str);
            str = Convert.ToBase64String(ZipClass.DeCompress(str));//解压缩字符串
            object obj = DeserializeObject(str);
            return obj;
        }
    }

    public static string SerializeObject(object o)
    {
        System.Runtime.Serialization.IFormatter obj = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

        MemoryStream ms = new MemoryStream();
        obj.Serialize(ms, o);

        BinaryReader br = new BinaryReader(ms);
        ms.Position = 0;
        byte[] bs = br.ReadBytes((int)ms.Length);
        ms.Close();
        return Convert.ToBase64String(bs);

    }

    public static object DeserializeObject(string str)
    {
        System.Runtime.Serialization.IFormatter obj = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        byte[] bs = Convert.FromBase64String(str);
        MemoryStream ms = new MemoryStream();
        ms.Write(bs, 0, bs.Length);
        ms.Position = 0;
        object o = obj.Deserialize(ms);
        ms.Close();

        return o;
    }

}

2、数据压缩类ZipClass.cs

using System;
using System.Web.UI;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression;

namespace Zip
{
    /**/
    /// <summary>
    /// PageClass 的摘要说明。
    /// </summary>
    public class ZipClass : System.Web.UI.Page
    {
        /**/
        /// <summary>
        /// 设定序列化后的字符串长度为多少后启用压缩
        /// </summary>
        private static Int32 LimitLength = 200;

        /**/
        /// <summary>
        /// 设定压缩比率,压缩比率越高性消耗也将增大
        /// </summary>
        private static Int32 ZipLevel = ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION;

        /**/
        /// <summary>
        /// 重写保存页的所有视图状态信息
        /// </summary>
        /// <param name="pViewState">要在其中存储视图状态信息的对象</param>
        protected override void SavePageStateToPersistenceMedium(Object pViewState)
        {
            //实现一个用于将信息写入字符串的 TextWriter
            StringWriter mWriter = new StringWriter();

            //序列化 Web 窗体页的视图状态
            LosFormatter mFormat = new LosFormatter();

            //将有限对象序列化 (LOS) 格式化的对象转换为视图状态值
            mFormat.Serialize(mWriter, pViewState);

            //将序列化对象转成Base64字符串
            String vStateStr = mWriter.ToString();

            //设置是否启用了加密方式,默认情况下为不启用
            Boolean mUseZip = false;

            //判断序列化对象的字符串长度是否超出定义的长度界限
            if (vStateStr.Length > LimitLength)
            {
                //对于长度超出阶线的进行加密,同时将状态设为加密方式
                mUseZip = true;

                Byte[] pBytes = Compress(vStateStr);

                //将字节数组转换为Base64字符串
                vStateStr = System.Convert.ToBase64String(pBytes);
            }

            //注册在页面储存ViewState状态的隐藏文本框,并将内容写入这个文本框
            RegisterHiddenField("__MSPVSTATE", vStateStr);

            //注册在页面储存是否启用压缩状态的文本框,并将启用状态写入这个文本框
            RegisterHiddenField("__MSPVSTATE_ZIP", mUseZip.ToString().ToLower());
        }

        /**/
        /// <summary>
        /// 对字符串进行压缩
        /// </summary>
        /// <param name="pViewState">ViewState字符串</param>
        /// <returns>返回流的字节数组</returns>
        public static Byte[] Compress(String pViewState)
        {
            //将存储状态的Base64字串转换为字节数组
            Byte[] pBytes = System.Convert.FromBase64String(pViewState);

            //创建支持内存存储的流
            MemoryStream mMemory = new MemoryStream();

            Deflater mDeflater = new Deflater(ZipLevel);
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory, mDeflater, 131072);

            mStream.Write(pBytes, 0, pBytes.Length);
            mStream.Close();

            return mMemory.ToArray();
        }

        /**/
        /// <summary>
        /// 重写将所有保存的视图状态信息加载到页面对象
        /// </summary>
        /// <returns>保存的视图状态</returns>
        protected override Object LoadPageStateFromPersistenceMedium()
        {
            //使用Request方法获取序列化的ViewState字符串
            String mViewState = this.Request.Form.Get("__MSPVSTATE");
            //使和Request方法获取当前的ViewState是否启用了压缩
            String mViewStateZip = this.Request.Form.Get("__MSPVSTATE_ZIP");

            Byte[] pBytes;

            if (mViewStateZip == "true")
            {
                pBytes = DeCompress(mViewState);
            }
            else
            {
                //将ViewState的Base64字符串转换成字节
                pBytes = System.Convert.FromBase64String(mViewState);
            }

            //序列化 Web 窗体页的视图状态
            LosFormatter mFormat = new LosFormatter();

            //将指定的视图状态值转换为有限对象序列化 (LOS) 格式化的对象
            return mFormat.Deserialize(System.Convert.ToBase64String(pBytes));
        }

        /**/
        /// <summary>
        /// 解压缩ViewState字符串
        /// </summary>
        /// <param name="pViewState">ViewState字符串</param>
        /// <returns>返回流的字节数组</returns>
        public static Byte[] DeCompress(String pViewState)
        {
            //将Base64字符串转换为字节数组
            Byte[] pBytes = System.Convert.FromBase64String(pViewState);

            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(pBytes));

            //创建支持内存存储的流
            MemoryStream mMemory = new MemoryStream();
            Int32 mSize;

            Byte[] mWriteData = new Byte[4096];

            while (true)
            {
                mSize = mStream.Read(mWriteData, 0, mWriteData.Length);
                if (mSize > 0)
                {
                    mMemory.Write(mWriteData, 0, mSize);
                }
                else
                {
                    break;
                }
            }

            mStream.Close();
            return mMemory.ToArray();
        }

    }
}

Cookie操作类、压缩、序列化的更多相关文章

  1. Cookie操作类、 包括创建、读取、修改、获取、销毁cookie

    Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...

  2. Cookie操作类 实现记住用户名和密码的功能

    import java.util.Hashtable;import java.util.Iterator;import java.util.Set;import javax.servlet.http. ...

  3. 【.NET】Cookie操作类

    public static class CookiesHelper { /// <summary> /// Cookies赋值 /// </summary> /// <p ...

  4. C#Cookie操作类,删除Cookie,给Cookie赋值

    using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...

  5. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  6. 使用SharpZIpLib写的压缩解压操作类

    使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...

  7. C# 文件操作类大全

      C# 文件操作类大全 时间:2015-01-31 16:04:20      阅读:1724      评论:0      收藏:0      [点我收藏+] 标签: 1.创建文件夹 //usin ...

  8. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  9. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

随机推荐

  1. xBIM WeXplorer

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  2. SpringMVC源码情操陶冶-DispatcherServlet

    本文对springmvc核心类DispatcherServlet作下简单的向导,方便博主与读者查阅 DispatcherServlet-继承关系 分析DispatcherServlet的继承关系以及主 ...

  3. SpringMVC之使用requestMapping映射请求、映射参数、映射头

    1. 映射请求 作用:使用requestMapping可以指定处理器可以处理那些请求 地方:类和方法前面都可以 @requestMapping 类定义处: 提供初步的请求映射信息,相对于web应用的根 ...

  4. 超级简便的容器化部署工具(使用 ASP.NET Core 演示)

    Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了.不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI.C ...

  5. 基于Java的WebSocket推送

    WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

  6. PHP curl 常用操作

    网页内容替换 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com"); //执行后 ...

  7. 12小时格式Xcode的-在一个“TimePicker”24 NSDate的设置

    我正在使用的NSDate对象,和好了,我的iPhone与24小时格式,所以当我在测试我的应用程序,一切正常,但是,我的一个朋友试图在他的iPhone上的应用程序 CodeGo.net,但12小时格式, ...

  8. Window Server 布署 WCF 服务 , 权限配置问题

    起因: 客户服务器运行环境要求提高安全性,建议数据连接串采取 加密措施 ,或改用 Window 验证 连接数据库服务 .于是我们打算选择后着,将后台服务(Window Server)数据库连接串调整为 ...

  9. python并发编程之多进程(三):共享数据&进程池

    一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...

  10. Docker安装weblogic

    Docker容器安装weblogic详细教程 前提:已经安装后Docker,并且能正常使用 (1)获取镜像:  docker pull ismaleiva90/weblogic12 docker pu ...