http无状态的根本原因:客户端通过套接字与服务端套接字连接上,发送请求,服务端响应向客户端发会响应报文之后,
因为连接耗服务器资源,连接立即断开,在处理完页面请求之后销毁页面对象。
服务端向客户端保存状态的三种方式:隐藏域,cookie,QueryString
刷新相当于重复上一次的操作,执行get请求,不会提交
使用ViewState保存数据时,页面的from必须是runat=“server”
cookie不兼容浏览器
cookie有两种存储方式,一种保存在浏览器的内存中,另一种是保存在客户端的硬盘中
aspx中cookie的设置(浏览器中存储cookie)
当设置失效时间时,将会把cookie写到客户端的硬盘中,
当不设置失效时间时,将会把cookie保存到客户端浏览器的内存中。
if (Page.IsPostBack)
{
string name = Request.Form["txtName"];
string pwd = Request.Form["txtPwd"];
if (name == "roger" && pwd == "123456")
{
HttpCookie cookie = new HttpCookie("name", name);
cookie.expires=DateTime.Now.AddDays(2); //设置两天后失效 服务器并不会把失效时间发送到服务器
Response.Cookies.Add(cookie);
Response.Redirect("GetCookie.aspx");
}
else
{
Response.Write("请填写正确的用户名和密码!");
}
}
aspx中cookie的获取:
HttpCookie cookie = Request.Cookies["name"];
if (cookie != null)
{
Response.Write("欢迎您登录! " + cookie.Value);
}
一般处理程序要想调用session必须实现接口IRequireSessionState,此接口在命名空间system.web.sessionState命名空间下。