ASP.net下使用static变量的一些体会
2009-05-21 23:02
447 查看
最近工作过程中,同事一个项目里面,发现一个问题,某B/S Web系统里面,A用户登录发布信息,同时B用户也登录发布信息,这时候对A用户而言,在页面上应显示A用户的内容和A用户的签名,对B用户也是如此,两者信息不会混淆。但实际上A用户处却显示A用户和B用户的签名。类似混淆的情况在我参与的另一个系统项目中也出现过,同时多个用户登录访问,填写信息,相互之间的信息混淆得比较严重。
项目源码中,用户ID是唯一的,用Session传递,不同登录用户的Session不会相同,不应出现混淆的情况,同时发现,我们大量地使用static变量。原意是想用作全局变量。使不同用户的信息不会混淆。但看来实际效果与设想的相反。
我当时手上还在忙另一个项目,也未想出合理解决方法。同事通过分析,初步解决了这个问题,为了避免自己忘记,整理了一下一些想法,也算为自己提个醒。
主要是static变量的作用范围需要明晰
在一个类中定义了一个static变量,只在同一个执行上下文中,所有用户访问到的都是同一个变量。也就是说在一个类中定义了一个static变量 所有用户访问到的都是同一个变量,static的作用范围显然是应用程序级,而不是会话级(页面级)。从这个角度分析,定义了static UserID变量,A用户登录系统,对UserID赋值A,UserID=A,在A没有发布信息之前,UserID的值维持A不变,此时B用户登录,同样的,对UserID赋值B,因为static作用范围是应用程序级,所有用户共享这个static变量,故此时UserID变量的值不再是A而是B。接着,A用户提交发布信息,A的UserID是B,所以最终显示的用户签名就不再是A而是B了,就产生了混淆。
这一点分析清楚了,在页面级,就禁止使用static变量,改用普通变量进行操作。配合使用ViewState,问题就得到解决;
博客园Meyer的Blogs也提到的这个问题,他的文章也给我不少启示。
记下这个问题,提醒自己一下。
项目源码中,用户ID是唯一的,用Session传递,不同登录用户的Session不会相同,不应出现混淆的情况,同时发现,我们大量地使用static变量。原意是想用作全局变量。使不同用户的信息不会混淆。但看来实际效果与设想的相反。
我当时手上还在忙另一个项目,也未想出合理解决方法。同事通过分析,初步解决了这个问题,为了避免自己忘记,整理了一下一些想法,也算为自己提个醒。
主要是static变量的作用范围需要明晰
在一个类中定义了一个static变量,只在同一个执行上下文中,所有用户访问到的都是同一个变量。也就是说在一个类中定义了一个static变量 所有用户访问到的都是同一个变量,static的作用范围显然是应用程序级,而不是会话级(页面级)。从这个角度分析,定义了static UserID变量,A用户登录系统,对UserID赋值A,UserID=A,在A没有发布信息之前,UserID的值维持A不变,此时B用户登录,同样的,对UserID赋值B,因为static作用范围是应用程序级,所有用户共享这个static变量,故此时UserID变量的值不再是A而是B。接着,A用户提交发布信息,A的UserID是B,所以最终显示的用户签名就不再是A而是B了,就产生了混淆。
这一点分析清楚了,在页面级,就禁止使用static变量,改用普通变量进行操作。配合使用ViewState,问题就得到解决;
博客园Meyer的Blogs也提到的这个问题,他的文章也给我不少启示。
记下这个问题,提醒自己一下。
相关文章推荐
- ASP.net下使用static变量的一些体会
- Asp.net中static变量和viewstate的使用方法(谨慎)
- Asp.net中static变量和viewstate的使用方法(谨慎)
- Asp.net中static变量和viewstate的使用方法(谨慎)
- 关于ASP.NET中使用MasterPage和PageBase页面基类的一些体会
- Asp.net中static变量和viewstate的使用方法(谨慎)
- 关于ASP.NET中使用MasterPage和PageBase页面基类的一些体会
- 【转】static变量的使用与asp.net
- 慎重Asp.net中static变量的使用方法
- [ASP.NET]static变量和viewstate的使用方法
- Asp.net中static变量和viewstate的使用方法(谨慎)
- Asp.net中static变量和viewstate的使用方法(谨慎)
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- ASP.NET一些控件使用笔记
- ASP.NET 中 Winform 的一些使用
- 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0)
- 一些asp.net使用
- asp.Net项目中全局变量使用的方式
- Asp.Net 中使用static 取代 application
- 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0)