陈 印,周 蓉,朱 倩
(四川职业技术学院计算机科学系,四川 遂宁 629000)
ASP.NET页面临时数据共享需求与解决方案研究
陈 印,周 蓉,朱 倩
(四川职业技术学院计算机科学系,四川 遂宁 629000)
探讨ASP.NET站点中WEB页面对应用程序、会话以及页面级别的临时数据共享需求,提出基于Application、Session以及ViewState等技术的数据共享解决方案.
ASP.NET;Application;Session;ViewState;数据共享
在A S P.NE T站点中,使用数据库是核心数据共享的最佳方案.然而,除了核心数据以外,站点页面中频繁使用的变量、页面交互中使用的参数等临时数据同样需要共享,而且这些数据的共享并不适合使用数据库.纵观A S P.NE T站点中的临时数据共享技术,不仅包含了传统的F o rm和Q u e r y S t r in g技术,更包括了.NE T F ram e W o rk框架下面向对象的A ppl i ca t tion、S ession以及V ie wS t a te等一系列特有的技术.然而不同级别的数据共享需求所适用的共享技术并非等同,因此,本文从共享需求角度来分析不同场合下页面临时数据的共享解决方案.
2.1 WEB应用程序级别
在W EB项目开发中,经常会遇到整个站点都需要共用某些数据的情况.比如,某些论坛网站需要统计站点访问量,通常情况下应该是不同时刻每个访问站点的浏览器进程都应该能获取到当前访问量并对数据进行增加,然后再通过某种方式储存起来供下一次访问.又比如常见的购物网站对在线人数的统计,一般情况下应该是有新的用户进程访问站点就应该对在线人数进行加一操作,有用户进程过期就应该对在线人数进行减一操作.这里的“站点访问量”和“在线人数”就属于W EB应用程序级别需要共享的数据.
2.2 会话级别
在限定时间范围内访问W EB站点的同一客户端的请求称为一个会话[1],在会话期间,某些数据可能需要在同一会话内的访问页面中共享使用.比如,某个用户访问站点并登录后,需要在访问期间能共享其登录的账户名、账户类型以及访问级别等数据,这就需要将这些数据进行会话级别的共享,以供本次访问站点的会话自己使用.
2.3 页面级别
W EB站点从一个页跳转到另一个页是最常见的页面交互方式.如果两个页面在访问前后需要用到相同的数据,这些数据就需要进行页面级别的共享.页面跳转交互在A S P.NE T中有两种情况:
一种是不同页面进行跳转交互.比如,在新闻站点的新闻列表页中点击新闻标题后跳转到该新闻的详情页,这两个页面在访问前后需要对新闻的关键数据(如新闻编号)进行共享,否则新闻详情页就无法获知需要呈现哪条新闻.
另一种是同一页面在刷新前后交互.比如,在查询页面点击服务器控件(如B u t ton)按照指定条件找到查询结果之后,又需要用服务器控件(如L in k B u t ton)实现上一页和下一页导航,这就需要在导航过程中对搜索条件进行共享.
3.1 WEB应用程序级别
在A S P.NE T中,站点应用程序级别的数据共享可以使用A ppl i ca tion对象来进行设置.A ppl i cation是应用程序级的对象,它通过在服务器上建立一个状态变量来存储信息,该变量创建在内存中,可供该应用程序中的任何一个页面访问[2].A ppl ica tion对象变量一般在全局配置文件(G l o bal.a s ax)的A ppl i ca tion_S t ar t事件中进行初始化,然后在其他页面直接访问:
设置方法:A ppl i ca tion["变量名"]="值";
取值方法:字符变量名=A ppl i ca tion["参数名"].T o S t r in g();
A ppl i ca tion对象共享的数据是o bj e c t类型,取值时需要根据需要进行类型转换。如前文提到的站点访问量、在线人数等,可以分别在G l o bal. a s ax文件的S ession_S t ar t和S ession_E nd事件中获取共享的A ppl i ca tion对象变量进行操作,并回存修改后的变量值:
A ppl i ca tion.L o ck();//开启排他锁
A ppl i ca tion["c o u nt O n"]=(int)A ppl i ca tion ["c o u nt O n"]+1;//在线人数增加
A ppl i ca tion.U n L o ck();//关闭排他锁
此外,A S P.NE T还提供了Cac he对象用于应用程序级别缓存临时数据,其用法与A ppl i ca tion相似,但更灵活,可以设置缓存有效时间及优先次序.
设置方法:Cac he["变量名"]="值";
取值方法:字符变量名=Cac he["变量名"]. T o S t r in g();
设置Cac he缓存变量时,可以使用以下方法设置过期策略:
Cac he.I nse r t("变量名","变量值",n ul l, D a te T i m e.N o w.Add M in u tes (10), Cac he. N o Sl idin g E xp i ra tion);
以上设置缓存变量的过期时间为现在开始的10分钟.如果缓存在N o Sl idin g E xp i ra tion设定的时间内没有被访问,缓存过期,否则就不过期.
3.2 会话级别
会话级别的数据共享一般使用S ession,它是A S P.NE T中存储会话级别共享数据的特有对象。
设置方法:S ession["变量名"]="值";
取值方法:字符变量=S ession["变量名"]. T o S t r in g();
如,用户登录成功以后可以将其账户名、账户类型和访问级别等数据设置到S ession对象中,在其他页面直接从S ession中取值即可.在会话的有效期内,该数据能且仅能被该会话独自使用.
此外,C oo k ie也可以用作会话级别的对象来共享数据,用法与S ession类似,不同的是前者存储在客户端,后者存储在服务器端.
3.3 页面级别
在A S P.NE T中,不同页面跳转前后的数据共享与同一页面刷新前后的数据共享视需求的不同可以采取不同的解决方案.
(1)不同页面跳转前后的数据共享解决方案.
通过超级链接或R edi r e c t方法发生的不同页面跳转后数据的共享(更多属于参数的传递)可以使用F o rm表单或Q u e r y S t r in g来实现,这与传统的Post或Get方法使用原理比较类似.F o rm表单适合于前一页向后一页发送(共享)大量数据的需求,而Q u e r y S t r in g则适合少量数据的共享需求.
①F o rm表单共享数据的方法:
a.a s px页面:R u nAt="S e rv e r"的表单中放置W EB服务器控件及数据.
b.a s px页面:通过R e q u est.F o rm["控件名"]获取数据。
②Q u e r y S t r in g的数据共享方法:
a.a s px页 面 :R es p onse.R edi r e c t("ne w s-De a t a i l.a s px?ne w s I D="+ne w s I D);
b.a s px页面:st r in g ne w s I D=R e q u est.Q u e r y S-t r in g["ne w s I D"];
(2)同一页面刷新前后的数据共享解决方案.
A S P.NE T中的V ie wS t a te对象为同一页面在刷新前后的数据共享提供了良好的解决方案:
设置方法:V ie wS t a te["变量名"]="值";
取值方法:字符变量=V ie wS t a te["变量名"].T o S t r in g();
同样,V ie wS t a te存储的也是o bj e c t类型的数据,支持复合数据的存储.
A S P.NE T中页面传值的方法多种多样,必须分清楚页面值传递的具体应用需求、掌握不同范围数据共享技术的适用场合,我们才能在W EB项目开发中做到胸有成竹,找到合适的解决方案.
[1]张俊锁.A S P.NE TS ession的原理和用法[J].信息通信, 2014,(11).
[2]郭清菊.A S P.NE T中页面间传值方法的实现[J].软件导判,2010,9(7).
责任编辑:张隆辉
TP31
A
1672-2094(2016)02-0162-02
2016-01-13
四川省教育厅自然科学一般科研项目13Z B0031.
陈 印(1979-),男,四川渠县人,四川职业技术学院副教授,硕士.研究方向:计算机软件技术.