Cookie操作类、压缩、序列化
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操作类、压缩、序列化的更多相关文章
- Cookie操作类、 包括创建、读取、修改、获取、销毁cookie
Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...
- Cookie操作类 实现记住用户名和密码的功能
import java.util.Hashtable;import java.util.Iterator;import java.util.Set;import javax.servlet.http. ...
- 【.NET】Cookie操作类
public static class CookiesHelper { /// <summary> /// Cookies赋值 /// </summary> /// <p ...
- C#Cookie操作类,删除Cookie,给Cookie赋值
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- 使用SharpZIpLib写的压缩解压操作类
使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...
- C# 文件操作类大全
C# 文件操作类大全 时间:2015-01-31 16:04:20 阅读:1724 评论:0 收藏:0 [点我收藏+] 标签: 1.创建文件夹 //usin ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
- XML转换为对象操作类详解
//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...
随机推荐
- xBIM WeXplorer
目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...
- SpringMVC源码情操陶冶-DispatcherServlet
本文对springmvc核心类DispatcherServlet作下简单的向导,方便博主与读者查阅 DispatcherServlet-继承关系 分析DispatcherServlet的继承关系以及主 ...
- SpringMVC之使用requestMapping映射请求、映射参数、映射头
1. 映射请求 作用:使用requestMapping可以指定处理器可以处理那些请求 地方:类和方法前面都可以 @requestMapping 类定义处: 提供初步的请求映射信息,相对于web应用的根 ...
- 超级简便的容器化部署工具(使用 ASP.NET Core 演示)
Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了.不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI.C ...
- 基于Java的WebSocket推送
WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...
- PHP curl 常用操作
网页内容替换 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com"); //执行后 ...
- 12小时格式Xcode的-在一个“TimePicker”24 NSDate的设置
我正在使用的NSDate对象,和好了,我的iPhone与24小时格式,所以当我在测试我的应用程序,一切正常,但是,我的一个朋友试图在他的iPhone上的应用程序 CodeGo.net,但12小时格式, ...
- Window Server 布署 WCF 服务 , 权限配置问题
起因: 客户服务器运行环境要求提高安全性,建议数据连接串采取 加密措施 ,或改用 Window 验证 连接数据库服务 .于是我们打算选择后着,将后台服务(Window Server)数据库连接串调整为 ...
- python并发编程之多进程(三):共享数据&进程池
一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...
- Docker安装weblogic
Docker容器安装weblogic详细教程 前提:已经安装后Docker,并且能正常使用 (1)获取镜像: docker pull ismaleiva90/weblogic12 docker pu ...