概述
1、数据量小,针对不同用户,数据不需要变化的话推荐用Session
2、数据量大,针对所有用户,数据不需要变化推荐用Cache
3、数据量大,针对不同用户,建议使用查询方式
4、如果只是本页要频繁使用的数据就用ViewState可以节省效率。
Cookie
保存在客户端,通过
Expries 设置有效期(可长可短,默认关闭浏览器cookie即失效)。
新建项并赋值
Response.Cookies["ckName"].Value = "Sutdent";
Response.Cookies["ckName"].Expires =
DateTime.Now.AddSeconds(10); // 如果不设置过期时间,默认关闭浏览器该cookie即失效
新建项,为不同子键赋值
Response.Cookies["ckAge"]["boy"] = "25";
Response.Cookies["ckAge"]["girl"] = "22";
Response.Cookies["ckAge"].Expires =
DateTime.Now.AddHours(1);
// Response.Cookies["ckAge"].Expires =
DateTime.Now.AddHours(-1); //
通过设置过期时间来清除cookie
用Response方法保存,用Request方法读取
ckMess.Text = "Name:" + Request.Cookies["ckName"].Value;
ckMess.Text += "
/>Time:"+DateTime.Now+ "
/>Boy:" +
Request.Cookies["ckAge"]["boy"]+"
/>Girl:"+Request.Cookies["ckAge"]["girl"];
cookie加密保存(这里用MD5加密算法举例)
using System.Web.Security;
Response.Cookies["ckName"].Value =
FormsAuthentication.HashPasswordForStoringInConfigFile(Request.Cookies["ckName"].Value,
"md5");
关于cookie的限制条件
cookie 单个文件大小不宜超过4KB,总数量不超过300个,因此总 Cookie 文件大小限制在 1200KB
之内。
其中每个域的 Cookie 不能超过20个。
Session
页面级变量,保存在服务器端,通过 Timeout 设置超时时间(可长可短,默认30分钟)。系统为每位访问者自动分配一个 sessionid(超时重新分配),使之互不影响,生命周期与访问者会话时间相同。
Session["scName"] = string.IsNullOrEmpty(scName.Value)?"default
session string":scName.Value;
Session.Timeout = 11; //
时间单位是分钟
lbSession.Text = Session["scName"].ToString();
通过项名称删除 session
Session.Remove("scName"); // 删除单条session
Session.Clear(); //
清空session
lbSession.Text = "session is clesred, please refreash.";
Cache
应用程序级变量,存于服务器缓存中被所有用户共享,由系统自动分配和回收,使用Cache["name"]==null?判断是否过期。
Cache["number"] = "65464646";
Cache["ca"] = "aaa";
Cache["cb"] = "bbb";
lbNumber.Text +="OldCache value:"+
Cache["number"].ToString();
清空缓存
IDictionaryEnumerator ide = Cache.GetEnumerator();
while (ide.MoveNext())
{
Cache.Remove(ide.Key.ToString());
}
lbNumber.Text += "点击清空后的cache数量:" + Cache.Count;
Application
应用程序级变量,被所有用户共享使用,生命周期与服务器运行时间相同。
ViewState
页面级变量(可以看作页面Session),可保存各种变量。
保存变量到 ViewState
ViewState["number"]=123456;
ViewState["table"]=DataTable; // 存放DataTable、Hashtable…对象
读取 ViewState
times=(int)ViewState["number"];
table=(DataTable)ViewState["table"];