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 ...
随机推荐
- mybatis No enum const class org.apache.ibatis.type.JdbcType.Integer
mybatis报错:没有Integer这个类型的jdbcType值 原因:mybatis配置重的jdbaType类型要是大写的 如图所示:
- HDU Be the Winner [Anti-SG]
传送门 n堆,每次拿走至少一个,剩下的可以分成两堆.最后拿的人输 打表观察发现和Nim游戏一样...裸Anti-SG啊 #include <iostream> #include <c ...
- 解决asp.net MVC中 当前上下文中不存在名称“model” 的问题
在vs2013下打开同事上传的cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等,在视图中也没有智能提示了:但是不影响编译运行,只是开发时候比较麻烦,但在同 ...
- 损失函数 hinge loss vs softmax loss
1. 损失函数 损失函数(Loss function)是用来估量你模型的预测值 f(x) 与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x)) 来表示. 损失函数越小,模型的鲁 ...
- [Python Study Notes]正则表达式
正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 P ...
- wangeditor Demo
<html> <head> <!--在这里字符集的设定很重要,如果设定不当将会出现乱码--> <meta charset="UTF-8"& ...
- Apache、Lighttpd、Nginx 三种web服务器对比
简介 1. Apache Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.Apac ...
- 捋一捋js面向对象的继承问题
说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装.继承和多态的一种编程思想罢了.今天我们就来说一下这其中继承的问 ...
- 插入排序实现&&选择排序实现
萌新刚刚开始学习算法,第一步是学习排序,毕竟算法的四大块"排序,查找,图,字符串"里面,排序是第一位的(PS:今天才知道算法提供的只是一个程序编写思路,一直以为是一个函数,难怪传入 ...
- Windows Server 2016-图形化备份域控制器
上边几章节我们补充了有关Windows Server 2016系统层面的相关内容,本章切回Active Directory正题,继续围绕AD域相关内容进行不断梳理补充.Windows Server B ...