62,244
社区成员




public class UUHiddenFieldPageStatePersister : HiddenFieldPageStatePersister
{
public UUHiddenFieldPageStatePersister(Page page)
: base(page)
{
}
public override void Load()
{
Stream stateStream = new FileStream("ViewStateContent.txt", FileMode.OpenOrCreate);
// Read the state string, using the StateFormatter.
StreamReader reader = new StreamReader(stateStream);
IStateFormatter formatter = this.StateFormatter;
string fileContents = reader.ReadToEnd();
// Deserilize returns the Pair object that is serialized in
// the Save method.
if (fileContents != "" && fileContents != null)
{
string json = (string)formatter.Deserialize(fileContents);
Pair statePair = JsonConvert.DeserializeObject<Pair>(json);
ViewState = statePair.First;
ControlState = statePair.Second;
reader.Close();
stateStream.Close();
}
//return;
base.Load();
}
public override void Save()
{
if (this.ViewState != null || this.ControlState != null)
{
if (Page.Session != null)
{
Stream stateStream = new FileStream("ViewStateContent.txt", FileMode.OpenOrCreate);
StreamWriter writer = new StreamWriter(stateStream);
IStateFormatter formatter = this.StateFormatter;
Pair statePair = new Pair(this.ViewState, this.ControlState);
// Serialize the statePair object to a string.
string json = JsonConvert.SerializeObject(statePair);
string serializedState = formatter.Serialize(json);
writer.Write(serializedState);
writer.Close();
stateStream.Close();
}
else
{
throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
}
}
//return;
base.Save();
}
}
public partial class Default : System.Web.UI.Page
{
private string TstViewStateKey = "TestTxt";
private PageStatePersister pageStatePersister = null;
protected override PageStatePersister PageStatePersister
{
get
{
//return base.PageStatePersister;
if (this.pageStatePersister == null)
{
this.pageStatePersister = new UUHiddenFieldPageStatePersister(this);
}
return this.pageStatePersister;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack == false)
{
this.TextBox1.Text = "这是个文本框";
this.ViewState[TstViewStateKey] = "[123测试文本321]";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string txt = this.ViewState[TstViewStateKey] == null ? "" : this.ViewState[TstViewStateKey].ToString();
this.Label2.Text = this.TextBox1.Text + txt;
}
}
using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using System.Web.UI;
public class VPage : Page
{
static private DirectoryInfo _Dir;
private static DirectoryInfo Dir
{
get
{
if (_Dir == null)
{
_Dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
if (!_Dir.Exists)
_Dir.Create();
_Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));
if (!_Dir.Exists)
_Dir.Create();
}
return _Dir;
}
}
protected override object LoadPageStateFromPersistenceMedium()
{
PageStatePersister ps = this.PageStatePersister;
ps.Load();
if (ps.ControlState != null)
ps.ControlState = 反序列化对象((string)ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 反序列化对象((string)ps.ViewState);
return new Pair(ps.ControlState, ps.ViewState);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
PageStatePersister ps = this.PageStatePersister;
if (state is Pair)
{
ps.ControlState = ((Pair)state).First;
ps.ViewState = ((Pair)state).Second;
}
else
ps.ViewState = state;
if (ps.ControlState != null)
ps.ControlState = 序列化对象(ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 序列化对象(ps.ViewState);
ps.Save();
}
private object 反序列化对象(string stateID)
{
if (stateID == null)
return null;
object state = Cache[stateID];
if (state == null)
using (var stream = File.OpenRead(Path.Combine(Dir.FullName, stateID)))
state = new BinaryFormatter().Deserialize(stream);
else
Cache.Remove(stateID);
return state;
}
private string 序列化对象(object obj)
{
string stateID = Guid.NewGuid().ToString("N");
Cache.Insert(stateID, obj, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);
using (var stream = File.Create(Path.Combine(Dir.FullName, stateID)))
new BinaryFormatter().Serialize(stream, obj);
return stateID;
}
static VPage()
{
ThreadPool.QueueUserWorkItem(h =>
{
var et = DateTime.Now.AddMinutes(-30);
Dir.GetFiles()
.Where(f => f.LastAccessTime < et)
.ToList()
.ForEach(f =>
{
try
{
f.Delete();
}
catch { }
});
});
}
}
使用它替换你的页面的父类 Page 即可。
不过这原本并不是为了什么“加密”的目的而设计的。但是既然信息根本不抛给客户端,那么自然你们领导也没什么可说的了。