在浏览器上点击任何一个按钮实际为对服务器产生一个新的请求
避免不经验证直接进入主界面(即要在主界面的Page_load中判断是否可以登录)
要记录一个是否登陆的状态可以用到:1.使用session 2.使用cookie 3.使用form验证//这三种主要解决一些数据存储的问题
public partial class A:XXX
{ int i=0//实例变量,存放在服务器端的实例变量
protected void Page_load(object Sender,EventArgs e){ Label1.Text ="0";}
protected void Button_Click(object Sender,EventArgs e){ i++; label1.text=i.tostring();}
//以上两个函数每次有一个新的请求发生时都会被重新加载
}
则页面始终显示为1,因每当一个新的请求过来类A都会被实例化一次即new一个新对象
所以头一步解决措施是用static int i=0;(//存在服务器端的静态变量)但新的问题是如果两个客户端同时访问服务器(即A会被实例化两次)时,i就会出问题了。这就可能发生如果static bool isLogin=false;一旦一个用户登录了,那么其他用户就都不用登陆了。
解决办法:if(page.ispostback){ label1.text="0"; }//这是一个保存在浏览器端的初始化为false一旦页面产生了第一次请求以后就都会为true,即用于判断是否为第一次登陆
用Session来处理
Http只负责传输,不能记录访问状态内容为下一次请求服务
Session存在服务器端,不光存用户的(登录)状态,还存一个SessionID,同时浏览器也会把ID存到cookie里面
Cookie只会在Broswer端存少量数据(有可能在文本文件中,也有可能在内存中)
页面头一次来一个请求,要从服务器相应设置一个cookie,所以用Response.SetCookie(new HttpCookie("useID","1"));
当页面带着cookie再次访问的时候用HttpCookie myCookie = Request.Cookies["userID"];response.write(myCookie.value);
每次请求浏览器都会把本地cookie发送给服务器,默认是浏览器关了,session和cookie都没了,但cookie可以设置有效时间,比如HttpCookie myCookie = new HttpCookie("username", "zhangsan");
myCookie.Expires = DateTime.Now.AddHours(1);
Response.SetCookie(myCookie);
这样cookie就会在1h之后自动清除,1h之内保留着