• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

谨慎使用asp.net中的static变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
   用惯了C/S编程,经常定义全局变量的时候,为了方便,而且下次调用某函数的时候仍能获取到变量的值,我们经常会定义static类型的全局变量。
 
  但是现在转而B/S的编程,坏习惯自然而来的的沿用过来。每张页面登录的时候,用户的基本信息全局变量全部都定义成了static类型。结果,发现了一个严重的问题。就是用户张三登录了,显示的是张三的基本信息,然后张三用户添加了一条记录。照例说列表中显示的是张三添加完的记录,结果列出来的是李四的信息。这是神马情况。
 
  其原因就是static变量搞的鬼了,因为张三用户登录后,李四马上登录了,此时服务器上static变量的值被重新赋值,而不是张三的名字了,别李四给替换了。这样,张三添加信息后,数据库在给张三列表显示其数据的时候。李四的信息就自然而来的显示出来了。这看似很诡异的问题,其实暗含着asp.net的运行机制问题。
 
  asp.net中,所有用户使用的是同一个static变量的值,这个常适用与记录站点的访问历史人数。每次多一个人访问,static变量的值就加一。所有的用户显示的站点历史人数值也跟着变化。但是其万万不能被使用于记录用户登入的全局变量,不然就会出现上述的问题。小小全局变量暗含着潜在的数据泄露的大杀机。
 
  那么要是想实现B/S端针对客户端用户的页面级的全局变量该怎么实现呢?还好,除了传统的Asp中的Session对象外,Asp.net提供了一个更好的ViewState对象。ViewState对象用来保存页面中的各种变量,甚至是对象。为什么可以用ViewState而不能用static变量哪?原因就是服务器端会为每个连接到该页面的用户分别建立一个ViewState,所以ViewState相当于页面级的Session。这下我们可以放心地使用ViewState来存取需要暂存的变量和对象了。不过如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。
 
  小弟今年大四,前不久给学院开发了个小系统,发布后才发现这个诡异的不同用户登录数据乱串的问题。后来网上找了资料才发现是全局变量的问题导致的。哎....还好这个系统没用机密数据,不然就悲剧了。现在急着要将static变量修改。除了网上的这个ViewState对象的方法。大家之前有碰到过这个问题,然后用什么更好的方法实现了的么?或者有哪位大神能深入的和我讲解下asp.net的几个全局变量(Session,Cookies,Application,Cache等)的运行机制。再次感谢感谢再感谢了啊。
 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET网络编程中经常用到的27个函数集发布时间:2022-07-10
下一篇:
【原创】构建高性能ASP.NET站点 开篇发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap