【ASP.NET】ViewState、Cookie、Session 状态保持机制

什么是状态保持机制? 

       大家可以跟我一起回忆:   

       用CSDN来举例:   当我们第一次登陆CSDN的时候,登陆界面会有一个复选框让我们勾选“记住密码”,这样我们在勾选之后再下次重新打开这个页面的时候电脑就会记录我们的用户和密码,其实这个用的就是Cookie机制,  在我们登陆进网站的时候,无论我们点击该网站的哪个分页面,我们的信息都会一直保持,这里就用到了Session机制 ,一旦关闭浏览器,服务器内的Session就消失了。

      下面我们就分别介绍四个状态保持机制:

1. ViewState(ASP.NET特有的一种机制)

  a.原理: 自动将一个键值对存放在隐藏域中 ,是ASP.NET的aspx页面所特有的,

   b. 使用方法:

  使用viewState: 在使用的时候必须是服务端控件,必须在form中添加 runat=server 

   创建一个ViewSate 并赋值: 

   ViewSate["value"]="123";  

例子:

protected void Page_Load(object sender,EventArgs e)
{
    int count=0;
    if(ViewState["value"]!=Null)
    {
       count=Convert.ToInt32(ViewState["count"]);
       count++;
       Count=count;
    }
    ViewState["count"]=Count; //当我们把数据给了viewstate对象之后,该对象会将数据进行编码
,然后保存到_Viewstate隐藏域中,然后返回给浏览器,  
   //当用户通过浏览器单击“提交按钮,”会向服务端发送一个post请求,那么_Viewstate隐藏域中的值也就会提交到服务端,

}

c.在使用ViewState时候需要注意: 

1: 必须在当前页面使用  2: 只能在表单POST提交的情况下使用 3:必须有runat=server 服务器端窗体标记

d.什么时候适合用ViewState:  

     适用于用一个页面在不关闭的情况下多次与服务器POST交互。

2.Cookie:客户端保存机制

   Cookie不光可以存储到浏览器中,还可以存储到电脑磁盘上,达到持久保存

   cookie: 是一个客户端状态保持机制,(网站的数据是存在客户端),cookie的存储方式有两种,如果不指定时间,那么存储在客户端浏览器内存中,如果指定了过期时间,那么存储在客户端的磁盘上,cookie是与具体的网站有关的,如果我们将cookie设置了过期时间,那么当用户在指定时间内访问我们的网站,那么属于我们网站的cookie数据会放在请求报文中发送过来,其他网站的cookie不会发送 。

 1.创建Cookie:

protected void Page_Load
{
//创建cookie

    Response.Cookies["cp1"].value="itcast";
}

2.Cookie的path属性:
  如果给path属性赋值=“WebForm/amin” 那么 只有访问admin目录下的这个页面的时候才把cookie从服务器写到浏览器中 默认选择的根目录 就是访问哪个页面也会将cookie从服务器写到浏览器 

 3.运行原理:   

 

4. 如果创建的时候给Cookie对象指定时间: 

 

5.Cookie的两种保存方式: 

      1.  浏览器内存  当我们没有为cookie设置保存时间的时候 cookie就被保存在当前浏览器内存中关闭浏览器以后 cookie也就不存在了

      2.   浏览器所指定为本次磁盘中  当我们为cookie设置了保存时间以后 cookie就保存在了当前浏览器的指定目录中知道所设定的时间到期以后 cookie会自动销毁(即使设定了1秒也会保存在本次磁盘中)

3.Session机制:

介绍:

      是服务端的一种状态保持机制,可以将各种类型的数据存储到session
      最终这些数据存储到服务器上,只要在一个页面中创建了Session 并给Session赋值了, 那么在整个网站都可以使用

注意: 这一点和ViewState不一样 ViewState是在当前页创建了以后只能在当前页的任何一个地方使用

Session过期问题:

1.  当我们请求页面以后 没有对页面上任何一个对象进行操作 默认20分钟以后 会自动回收 如果这期间 对页面上任何一个对象操作了 那么 重新开始计算

2. Session设置超时时间:
  在服务器端 session如果不操作 默认保存20分钟 每次刷新都会重新加20分钟,但是如果关闭浏览器就无法显示出来

  如果想修改 可以设置
  Session.Timeout=60; // 60是分钟

   如果浏览器一直不动,20分钟之后session内就会无东西,但是sessionid还有值,一旦关闭浏览器sessionid就会没东西

Session原理图:

应用场景:

在登录页面内添加session;
在登录之后的页面内检查session中是否有值,如果不添加这个操作,如果有一个人知道了自己的网页,那么就可以直接登录
 

发布了130 篇原创文章 · 获赞 33 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_30631063/article/details/102459376