asp.net 常用传值方式及其优缺点分析

     这一段时间页面传值使用多的是重定向方法,但是传送的值会显示在浏览器中,看着十分不安全,所以就总结了一下其他的方法,以后尽量使用别的方法。

一、使用response.Redirect

这种方式是一种最简单的传值方式,使用简单方便。但是有一个缺点,它传送的值显示在浏览器的地址栏中,如果不是传递的数据安全性不是很高,可以使用这个方法。但是对于传送数组和对象的时候,用这个方法就不可以了。

传值页面:

 protected void BtSearchHistory_Click(object sender, EventArgs e)
   {
    Response.Redirect("attdendanceHistory.aspx?groupno="+lblgroupno.Text.Trim()+"&"+"UserRoles="+ lblUserRoles.Text.Trim());
   }
接收页面:


      {        // 获取传递过来的groupno和UserRoles</span>
             if (Request.Params["groupno"] != null && Request.Params["groupno"].Trim() != "")
                {
                    groupno = Request.Params["groupno"];
                }
                if(Request.QueryString["UserRoles"] !=null && Request.QueryString["UserRoles"].Trim() !="")
                {
                     userRoles = Request.QueryString["UserRoles"];
                }
         }

缺点:

如下图,会在地址栏中显示传递值的信息,不安全。不能够传递对象


优点:

经典的传值方式,使用非常简单。


、使用application对象变量传值

application对象的作用范围是整个全局,所以对所有的用户都有效,和其配合在一起使用的方法是Lock和Unlock,用这两个方法可以处理多个用于对存储在Application对象的写入问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值。而UnLock是解除对Application对象的锁定。

传送页:

protected void Page_Load(object sender, EventArgs e)
        {
            //Application传值
            string name;
            application.lock();
            name = application["name"].tostring();
            label1.text = name;
            application.unlock();

        }
接收页:

    protected void Button1_Click(object sender, EventArgs e)
        {
            //application传值
            Application["name"] = "小娟娟";
            Server.Transfer("get.aspx");
        }

使用场景:这种方式是通过HttpApplication对象在服务器生成一个状态来存储所需要的信息,该Httpapplication对象变量可以作用于真个web应用程序,所以该对象一般存储一些要公布的信息,而对于那些涉及到用户个人的敏感数据,就不适合用这个方式来存储。

对比Session:

Session是对于每个单独的用户,当用户关闭当前浏览器,那么Session会失效。Application 对象存储的变量是针对于所有访问程序的用户,即使有用户关闭了浏览器,变量的值也不会丢失。

三、cookie传值

   cookie 是存储区在用户自己的电脑中,以文本的形式存在于磁盘中。这种方式很有意思,很多登录系统就是利用Cookie实现用户身份自动登录。用户登录一次的登录信息将被写入到用户电脑的cookie文件中,下次登录的时候,网站自动读取cookie完成用户身份验证。和seesion使用的方法差不多,但是cookie是存放在客户端的,session是存放在服务器端的,cookie的使用要配合AsP.net内置对象request来使用。

需要注意的是:多数浏览器支持最多可以4096字节的cookie,那么要将为数不多的几个值保存在用户计算机上,浏览器还限制了每个站点可以在用户计算机上保存的cookie数据。因为用户还可以设置自己的浏览器,拒绝接受cookie,这种情况下,只能够使用别的方式了。

传送页:

    protected void Button6_Click(object sender, EventArgs e)
        {
            HttpCookie cookie = new HttpCookie("UserName");
            cookie.Value = "小娟娟";
            Response.AppendCookie(cookie);
            Server.Transfer("get.aspx");

        }

接收页:

    //cookie传值
      Label1.Text = Request.Cookies["UserName"].Value.ToString();

优点:数据传递方式方便,存储在客户端,不占用服务器资源。

缺点:安全性不高,我们开发人员不应该过多的依赖于cookie,而应该用结合的方式完成对敏感数据的存储。(2)多数浏览器对于cookie会有个数限制,而且并非所有浏览器都支持cookie,用户可以禁止和删除cookie,这种情况下使用就要十分小心了。

综上所述:cookie还是少用吧。


四、session传值和使用

   session作用于用户个人,所有过多的存储会导致服务器的内存资源耗尽。这一段时间关于登陆和权限判断,用的最多的就是session,了解也比较多 ,除了传值,也写一下使用Session需要注意的东西。

创建Session:

     //创建Session
            HttpContext.Current.Session["teacherID"] = currentUser.UserID;
           HttpContext.Current.Session["operater"] = currentUser.UserName;</span>
接收session:

     #region 从登陆session 获取用户名和角色
                if (Session["userinfo"] == null || Session["userinfo"].ToString() == "")
                {
                    Maticsoft.Common.MessageBox.ShowAndRedirect(this, "请登录后查看!", "/Mobile/Login.aspx");
                    return;

                }
             //获取操作员和IP
                lblTeacherName.Text = Session["operater"].ToString();
                //获取操作员和IP
                lblTeacherID.Text = Session["teacherID"].ToString();

          #endregion
Session 使用的时候,一定要判断一下是否为空,增强代码的严谨性。这两天进入测试阶段,注意到以前很多没有注意的问题,稍后会总结。

优点:

   这种方法将数据存储在服务器中,可以传递一个对象,传递数据比较多,安全性比较高。session 可以在应用程序的多个页面中以名称/值对的方式共享,直到浏览器用户关闭自己的浏览器或者Session超时。(Session的时间可以自己设置,不设置,默认是20分钟),所以常用于登录身份验证中。例如:可以传递一个UserInfo,在别的页面,可以任意取Use的各种属性值。

缺点:

过多的Session会消耗服务器的服务器资源,所以使用要慎重。


五、使用Server.Transfer方法

   网上资料说这个才是面向对象所使用的方法,使用Server.Transfer方法把流程从当前一个页面引导到另外一个页面,新的页面使用前一个页面的应答刘,所以这个方法是完全面向对象的。

   使用这个方法我们可以在另一个页面以公开对象属性的方式来取值,首先定义一个public权限的属性,该属性返回所需要传递的值。然后context..Handler属性来获得前一个页面实例对象的引用,也就是可以通过访问自定义的属性来获取需要的值。

传送页:

    protected void Button7_Click(object sender, EventArgs e)
        {
            Server.Transfer("get.aspx");
        }
        public string name
        {
            get { return "我是小娟娟"; }
        }
接收页:

//server.Transer传值
            a newweb;
            newweb = (source)Context.Handler;
            Label1.Text = newweb.name;
这里面有一个问题,newweb=(source)Context.Handler中,这个source报错,应该是少了什么引用,没有成功的运行出来,我还需要再查询一下。


六、站在巨人们的肩膀上

感谢 伟旗的专栏   Asp.net页面传值的优缺点  页面传值适用范围 优秀文章的分享。


小结:

故事还没有完结,回想一下get/post/MVC中如何使用,还需要再复习一下。



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值