ViewState、Cookie、Session学习总结

本文详细介绍了ASP.NET中的ViewState机制及其使用前提,探讨了Cookie的存储方式与应用场景,并解析了Session的工作原理及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ViewState

1.为什么要使用ViewState
 (1)导致一些敏感信息被泄漏;
 (2)针对ViewState的攻击
 (3)很差的性能,在某些极端的情况下可能根本就没有性能。
 (4)并发性差 -- 想象一下如果每次回传的数据都有50kB,那么你的服务器能承受多少并发的访问量呢?
 (5)糟糕的全局设计

2.ViewState为什么重要,它能做什么?

 (1)以键值对的方式来存控件的值,和Hashtable的结构类似;
 (2)跟踪那些ViewState中出现改变的值,以便对这些脏数据(dirty)进行进一步的处理;
 (3)通过序列化将ViewState中的值保存在页面的隐藏域(Hidden Field)中(这是默认的持久化方式),并通过反序列化得到对应的ViewState对象以便进行相应的操作;
 (4)在页面回传的过程中自动的存储ViewState中的跟踪的值。

3.

(1)在页面回传的过程中保存状态值,使原本没有“记忆”的Http协议变得有“记忆”起来。

(2)大多数ASP.NET 服务器控件存储其属性值得方式是通过ViewState的方式存储的,而不是我们通常想象的那样通过类的私有字段来存储。
4.使用ViewState的前提条件是什么?
   (1) 页面上存放一个 runat="server" 的表单,那么生成html代码的时候就会自动添加一个名字叫 __VIEWSTATE的隐藏域到html代码中。
   (2)当页面的这个runat="server"的表单被提交的时候,这个隐藏域 也会被提交到服务器。
   (3)通俗的说,页面对象的ViewState属性,只有在当前页面表单提交操作的时候才有用。VIEWSTATE适用于同一个页面在不关闭的情况下多次与服务器进行POST表单交互
5.最后解释:ViewState就是服务器将数据存放在输出给浏览器的HTML代码里,并且通过浏览器提交表单时重新获取这些数据的一种机制。
小练习:

前台:

<!--这里不能忘了runat="server"-->
    <form id="form1" runat="server">
    <div>
    <input type="submit" value="递增" />
    </div>
    </form>


后台:

if (ViewState["num"] != null)
        {
            //如果ViewState["num"]不为空,则为num赋予viewState的值并使其自增
            int num = Convert.ToInt32(ViewState["num"]);
            num++;
            Response.Write(num);
            ViewState["num"] = num;
        }
        else
        {
            //如果ViewState["num"]无值,则打印1,并为ViewState复制
            Response.Write(1);
            ViewState["num"] = 1;
        }

 

二、Cookie :在浏览器端长久保存数据的一种机制。(浏览器缓存Cookie,浏览器硬盘Cookie)

                          本质上,就是在浏览器端的一个txt文件。
1.使用场景:最近浏览商品;2周内免登陆;
2.如何删除Cookie,创建一个相同键的Cookie对象,设置失效时间为负数(其实就是创建一个已经失效的Cookie),发给浏览器,浏览器会用这个失效的Cookie把原来的Cookie给覆盖掉,那么就达到了删除Cookie的目的。
3.注意:设置了cookie的发送目录,也就是说:只有当用户访问 web/admin路径的时候,浏览器才回将这个cookie发送给服务器
    cookie.Path = "/Web/admin/";
4.Cookie是不论浏览器请求服务器什么类型的资源,都会被发到服务器去的。(哪怕是请求图片,css文件,js文件都会发送cookie)

5.起初对Cookie的定义是网站放置在硬盘上的程序。它们驻留在计算机上,用于收集有关您和您在互联网上执行的任何操作的信息,只要网站需要,就可以下载此Cookie收集的所有信息。

6.Cookie是指Web服务器可以在用户的硬盘上存储的一段文本。Cookie允许网站将信息存储在用户的计算机上,并在以后检索此信息。这些信息以名称/值对的形式存储。网站可以为每个访问者生成唯一的ID号(也就是所谓的SessionId),并使用Cookie文件将此ID号存储在每个用户的计算机上。

7.如果不设置失效时间,则浏览器会将此cookie保存到浏览器缓存中;如果设置,就存硬盘里。

    Cookie机制
    主要是指服务器和浏览器间 互相传递 Cookie数据的一种 流程。
    1.服务器到浏览器:
    1.1服务器通过响应报文的 Set-Cookie 方式向浏览器发送 Cookie 键值对和失效时间和path等数据
    1.2浏览器接收到服务器的Set-Cookie命令之后,会自动的根据内容 在浏览器端创建Cookie文件。
    1.3浏览器会根据Cookie的失效时间,自动清除过期的Cookie文件。
    2.浏览器到服务器
    2.1当浏览器请求一个域名的时候,会自动在浏览器端读取 该域名下的Cookie文件,并将里面的键值对装入请求报文,发送给服务器。
    2.2当服务器接收到浏览器的请求报文里的Cookie命令后,会自动将里面的键值对 封装到 Request.Cookies集合中,供程序员使用。

小练习:利用cooikes实现登录校验

<head>
    <title></title>
    <script type="text/javascript">
        window.onload = function ()
        {
            document.getElementById("btnLogin").onclick = function ()
            {
                document.getElementById("form1").submit();
            }
        }
    </script>
</head>
<body>
    <form id="form1" action="" method="post">
    <div>
        <input type="hidden" name="ispostback" value="1" />
        <input type="text" id="txtName" name="txtName"/><br /><br />
        <input type="text" id="txtPwd" name="txtPwd" /><br /><br />
        <input type="button" id="btnLogin" value="登录"/><br />
    </div>
    </form>
</body>


后台:

string name = Request.Form["txtName"];
        string pwd = Request.Form["txtPwd"];
        if (!string.IsNullOrEmpty(Request.Form["ispostback"]))
        {
            if (name == "sxycxwb" && pwd == "123")
            {
                //1.服务端创建Cookie对象,并设置键值对
                HttpCookie cookie = new HttpCookie("loginName", name);
                //2.设置Cookie失效时间
                cookie.Expires = DateTime.Now.AddMinutes(1);
                //3.将Cookie对象 添加到 相应对象的Cookie集合中
                Response.Cookies.Add(cookie);

                HttpCookie cookieTime = new HttpCookie("exTime",cookie.Expires.ToString());
                cookieTime.Expires = cookie.Expires;
                Response.Cookies.Add(cookieTime);

                PageHelper.showMsg("欢迎" + name + "登录成功!","Cookies.aspx");
            }
            else
            {
                PageHelper.showMsg("用户名或密码错误,登录失败!", "Cookies.aspx");
            }
        }
    }



三、Session
1.配置整个网站的Session失效时间
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
2.当浏览器禁用了 Cookie后,那么服务器就可以选择将 SessionId存入地址栏的url中来传递。
3.注意:一般处理程序中,如果要使用 Session的话,必须实现 IRequiresSessionState 接口
            这种情况下的接口叫 【标识接口】,它不是为了规范子类的行为,也就无所谓在接口里定义方法。
            它的存在,就是为类加上一个【标识】而已,当程序创建类的对象的时候可以检查是否有此【标识】。

4.Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串

小练习:利用Session验证登录信息,并作友情提示

string name = Request.Form["txtName"];
        string pwd = Request.Form["txtPwd"];
        if (!string.IsNullOrEmpty(Request.Form["ispostback"]))
        {
            if (name == "sxycxwb" && pwd == "123")
            {
                PageHelper.showMsg("欢迎" + name + "登录成功!", "SessionCheck.aspx");
                Session["info"] = name + ":" + pwd;
            }
            else
            {
                PageHelper.showMsg("用户名或密码错误,登录失败!", "Cookies.aspx");
            }
        }


 

if (Session["info"] != null)
        {
            Response.Write("欢迎" + Session["info"].ToString());
        }
        else
        {
            PageHelper.showMsg("对不起,请重新登录","SessionTest.aspx");
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值