Asp.Net页面状态保持的几种机制
>常用的状态保持方式:
1.View State:(ASP.Net中特有的)
- ASP.Net的.aspx页面特有,页面级的,就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式(base64加密)
- 服务器端控件的值都是自动保存在viewstate中(如只展示,应禁用viewstate)。
- 本质就是一个隐藏域(适合当前页面向当前页面传递数据)
2.Cookie:
- http协议下的一种方式,通过该方式,服务器或者脚本能够在客户机上维护状态信息;
就是在客户端保存客户端单独使用的数据的一种方式; - 本质就是一小段文本,可以设置过期时间,有效路径,多页面共享数据。
- Cookie是服务器向浏览器写出的 然后浏览器保存起来 下次浏览器访问当前网站的时候 浏览器不经过服务器同意 自动的将cookie读出来 发送给服务器
//有效期:
Response.Cookies["datetime"].Expires = DateTime.Now.AddDays(7);//有效期一星期过期
Response.Cookies["Users"].Expires=DateTime.Now.AddDays(-1);//将生命期设置为负数(过期)
Response.Cookies["Users"]["User1"]= "张三";
Response.Cookies["Users"]["User2"] = "李四";
//多值Cookie
HttpCookie ack = new HttpCookie("Users");
ack.Value="张三";
ack.Value = "李四";
//控制cookie传输范围:
//设置主域和子域(子域可以访问主域,主域不能访问子域,子域的Cookie只能被自己访问)(儿子住父亲的房 子,父亲不能住儿子的房子)
//请求子域页面,主域的Cookie也会一起发送到服务器,(访问权(继承权))
//设置成主域
Response.Cookies["Users"].Domain = "域名";
Response.Cookies["Users"].Path = "/";//通过路径限定cookie传值范围
3.Sesstion:
- 现在指的是进程内session
- 在服务器端保存客户端单独使用的数据的一种方式;(会话级,单独使用)(验证码)
- 在服务器端 session如果不操作 默认保存20分钟 如果想修改 可以设置Session.Timeout=60; // 60是分钟
- 注意:使用session注意的地方:在一般处理程序中使用session 必须实现IRequiresSessionState接口
- 存储在服务器端,一般用于验证码信息的多页面校验,不易通过cookie保存客户端再做校验
- Sesstion通过响应报文向客户端Cookie写入SesstionId,当再次请求,会在Asp.Net第六和七个事件加载Sesstion对象,根据SeestionId将本页面与服务器端的Sesstion对象相关联,后续处理将可以使用Sesstion对象的数据值。
Session["userkey"]= DateTime.Now.ToString();
//等价于:
HttpContext.Current.Session["userkey"] = DateTime.Now.ToString();//HttpContext.Current为http请求获取HttpContext上下文对象
//------------------------
string VcodeStr = "19805";
context.Session["vcode"]=VcodeStr;//写入验证码 登录校验要获取验证码(会话期间,服务器端)
//登录状态
Session["LoginState"] = "OK";
//----------------------------------------------------------
//多页面继承,判断是否登陆成功!(继承该类,自动注册page_init方法,用于判断用户是否登录,发生page_load之前)
public class BasePage:System.Web.UI.Page
{
//Page_Init会自动编译成页面声明周期的一个方法(是一种规则)
//Page_Init初始化之前的一个事件,就是控件树的空间都new一个实例,并赋默认值,内部就是执行一个递归初始化
public virtual void Page_Init(object sender, EventArgs e)
{
//获取页面状态信息
string state = Session["LoginState"] as string;
if (state == null)
{
Server.Transfer("DefloatPage.html");//跳转至登录页面,请求登录
return;
}
else
{
//登录成功,不做操作!
}
}
}
4.Application:
- 在服务器端保存共享数据的一种方式,Application状态是整个应用程序全局的;(全局变量,不一定必须使用)
- 在服务器内存中存储数量较少又独立于用户请求的数据,由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索;