所有的Web程序都是无状态的。
原因:它们使用的Http传输协议本身就是无状态的协议。
表现:每个返回到客户的页面,都与之前或之后的页面不相关,无法访问之前页面的数据,或为之后页面送数据。
解决:在服务端或客户端通过使用几个对象来专门存储相关状态的数据。
存储在服务端的状态对象
Session:
每个独立的浏览器会创建一个独立的Session ,不是一台电脑一个Session。
Session存储的数据,在当前会话中共享。
Session在20分钟之内,如果没有会话操作,则Session会自动释放。
语法:
1.用Session存值:Session["key名"] = 值; 值,不只是个字符串,可以是对象。
2.从Session取值:类型 变量名 = (强制转换的类型名)Session["key名"]
3.判断Session中是否存有某个值
4.释放Session
释放某个Session:Session["key名"] = null;
释放会话中的所有的Session:Session.Clear();
自动释放:20分钟
案例:
1.登录:防止绕过登录界面。
2.登录:把用户名记好。在每个界面上显示“欢迎您:用户名”
Application
所有会话共享一个Application空间,任何一个人改变Applciation中的内容,其它人都会发现被改变了。
Application中的数据不会自动释放。
1.用Application存值:Application["key名"] = 值; 值,不只是个字符串,可以是对象。
2.从Application取值:类型 变量名 = (强制转换的类型名)Application["key名"]
3.判断Application中是否存有某个值
if(Application[“key名”] == null)
{
}
4.释放Application:Application["key名"] = null;
存储在客户端(硬盘上的)的状态对象:
Cookie
保存在客户端内存或硬盘般上的。
临时Cookie是存在浏览器内存中的。持久Cookie是存在硬盘上浏览器相关的Cookie目录中的。
设置Cookie
Response.Cookies["key名"].Expires = 过期时间。
Response.Cookies["key名"].Value = 值。
读取Cookie
string s = Request.Cookies["key名"].ToString();
会写入临时Cookie,持久Cookie;会读取Cookie;会删除Cookie。
用cookie做登录