zoukankan      html  css  js  c++  java
  • 页面传递参数

    我们在创建ASP.NET应用时,常常会碰到在页面之间传递参数的应用,在页面之间传递参数有好几种方法(Url地址法、Application/Session、Cache、Cookie),如何在页面之间有效的传递参数呢?下面我们来一一分析。

        

    [b]Url地址法[/b][/align]
         定义:在页面地址后面附带参数的方式浏览页面
         使用:
         我们可以用两种方法来传递Url地址在不同页面之间切换并且传递参数:
         服务器端方法(Response.Redirect) 在此方案中,服务器只是将上下文传输到另一页。其优点是您可以共享页之间的页上下文信息。其缺点是用户的浏览器不知道在进行传输,因此不更新浏览器的历史记录。如果用户刷新此页,则可能会产生意外的结果。例如:Server.Transfer("Test.aspx?ParaID=ParamValue");

         使用浏览器(Server.Tansfer) 在此方案中,将一个命令发送到用户浏览器,使浏览器获取另一页。其优点是更新浏览器的历史记录。其缺点是此方案执行额外的往返过程,这会影响性能。
         例如:Response.Redirect("Test.aspx?ParamID=ParamValue");

                                   性能及安全性分析
         性能:1、只能传递字符型参数,且长度受限,传递对象要先手工序列化。
               2、Url地址法可以很方便的在页面之间切换并传递参数,无需额外的处理,基于正常情况比较不会性能损失。
         安全性:
         1、很容易导致错误:开发人员可能没有对参数和地址进行编码,参数可能包含一些非法字符从而导致错误;
         2、信息泄露:Url地址在客户端可见,导致会泄露信息,可能被黑客用来攻击系统。比如有些网站通过这个方法在页面传递一些关键参数,导致某些专业用户只需要适当修改这个Url中的参数值就可以获得额外的访问权限,进行非授权的操作,这显然是我们所不期望的。
         
         建议:1、地址要编码;2、参数加密,但带来性能损失。3、在安全性要求较高的系统中我们不推介使用这种方法,他只适合在一些安全性要求不高,页面逻辑比较的简单的的场合。

         Tips:在页面跳转时将 Response 对象的 BufferOutput 属性设置为 true 来提高性能。

         

    [b]使用Application/Session传递[/b][/align]
         定义:通过在Application/Session中定义变量的方式在页面之间传递参数的方法
         使用:我们可以在Application/Session定义变量,例如定义参数
     Application["ParamID"]=ParamValue;
     Application["ParamID"]=ObjectInstance;
     Session["ParamID"]=ParamValue;
     Session["ParamID"]=ObjectInstance;
     在页面中引用参数:
     VarID=Application["ParamID"];
     VarID=Session["ParamID"];
     这种方式传递参数就是逻辑简单清晰,保密性好,对用户透明;需要靠率会话(Session)过期的问题.
                              性能及安全性分析
          性能考虑:
          1、可以传递任何值,对象自动序列化,但来额外的性能损失;
          2、Application/Session都要占用内存,消耗宝贵的服务器资源,且需要手工释放变量;
          安全性:
          1、Application是全局对象,任何用户都可以访问,可能导致用户变量之间的值覆盖,从而丢失信息。
          2、对用户透明,保密性较好

          建议:1、对用户量较大的系统不推介使用,因为要消耗大量的内存资源。2、适宜用在传递一些关键全局性的参数,且宜为字符类型的参数,千万不要通过它来传递大内存对象。
          
                          

    [b]使用Cache传递参数[/b][/align]
          定义:通过在全局对象Cache中定义变量来传递参数的方法。
          使用:详细应用请见NET Framework SDK文档
          定义变量:Cache.Add("ParamID", "ParamValue", null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.High, null);
          在页面中使用:VarInstance=Cache["ParamID"];
          Cache方式传递参数有些复杂,可以传递任何值,享受内存自动回收的好处。

       性能及安全性分析
          性能考虑:
          1、可以穿传递任何值,对象自动序列化,但来额外的性能损失;     
          2、要占用内存,消耗宝贵的服务器资源,在设置生存期后系统可以自动释放所占用内存。主要其生存期时间,否则就和Application一样的效能。
          安全性:
          1、Cache也全局对象,任何用户都可以访问,可能导致用户变量之间的值覆盖,从而丢失信息。
          2、对用户透明,保密性较好

         建议:这是笔者认为最好的传递参数的方式,在设定参数的生存期的情况下,生存期尽可能的短,以使系统自动回收内存,当然用户也可以手工释放打倒回收内存的效果。

                               

    [b]Cookie(小甜饼)法[/b][/align]
         定义:通过把参数定义在Cookie中在不同页面之间传递参数的方法
         使用:定义变量:
         HttpCookie MyCookie = new HttpCookie("ParamID");
           MyCookie.Value = ParamValue;
           MyCookie.Expires = now.AddHours(1);
           Response.Cookies.Add(MyCookie);
         在页面中使用:VarInstance=Request.Cookies["ParamID"].vlaue;更完整的用户请参见NET Framework SDK文档

                         性能及安全性分析
         性能考虑:
         1、可以存储字符型数据,且长度受限,不适宜传递大数据;传递对象需要手工序列化。
         2、参数在客户端和服务器端来回传递,占用网络带宽。
         安全性:
         1、Cookie在客户端保存,用户可以查看,会导致信息泄露,可能为黑客所利用来攻击系统。
         2、Cookie在客户端和服务器段来回传递,可能被截获,可能为黑客所利用来攻击系统。

         建议:1、如果需要保留跨天的数据,否则不建议使用;2、数据需要加密保证安全性;3、一定要设置好生存期[过期]时间。

  • 相关阅读:
    设计模式之访问者模式
    设计模式之命令模式
    设计模式之迭代器模式
    tomcat8.0.11性能优化
    java 基础 --集合--012
    StringBuffer和StringBuilder的区别
    jquery 入门
    java 基础 --匿名内部类-008
    java 基础 --多态--009
    java 基础--继承--007
  • 原文地址:https://www.cnblogs.com/jesse/p/659947.html
Copyright © 2011-2022 走看看