.net学习笔记(三)

来源:互联网 发布:python gnu readline 编辑:程序博客网 时间:2024/06/07 05:19

在浏览器上点击任何一个按钮实际为对服务器产生一个新的请求

避免不经验证直接进入主界面(即要在主界面的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之内保留着

0 0