在页面之间传递参数大全 |
|
我们在创建ASP.NET应用时,常常会碰到在页面之间传递参数的应用,在页面之间传递参数有好几种方法(Url地址法、Application/Session、Cache、Cookie),如何在页面之间有效的传递参数呢?下面我们来一一分析。
Url地址法
定义:在页面地址后面附带参数的方式浏览页面 使用: 我们可以用两种方法来传递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 来提高性能。
使用Application/Session传递
定义:通过在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、适宜用在传递一些关键全局性的参数,且宜为字符类型的参数,千万不要通过它来传递大内存对象。
使用Cache传递参数
定义:通过在全局对象Cache中定义变量来传递参数的方法。 使用:详细应用请见NET Framework SDK文档 定义变量:Cache.Add("ParamID", "ParamValue", null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.High, null); 在页面中使用:VarInstance=Cache["ParamID"]; Cache方式传递参数有些复杂,可以传递任何值,享受内存自动回收的好处。
性能及安全性分析 性能考虑: | |