asp.net全局变量问题

问题描述

我用vs2010写了一个程序,多处需要用到这些个变量,用一个类GValues专门写了这些publicstaticstringuName;//用户名publicstaticintuCode;//学校代码publicstaticstringBM_schoolName;//已经报名学校名称publicstaticstringschoolName;//学校名称在登录的地方,通过下面语句赋值:GValues.uName=this.txtNum.Text.Trim();Session["TeacherName"]=this.txtNum.Text.Trim();其他页面通过Session["TeacherName"]获取教师登录账户信息,同时查阅教师自己信息和本校数据,这样少数人访问网站没有,如果访问量大点就出现比如A老师登录,看到却是B老师和B老师学校数据,这种情况怎么解决呢,请大侠指点,谢谢!

解决方案

本帖最后由 cqhq2008 于 2014-07-09 10:48:10 编辑
解决方案二:
先清空Session,再进行赋值。
解决方案三:
这跟多少没什么关系...你一般应该这样设计publicclass老师{publicstringuName{get;set;}//用户名publicintuCode{get;set;}//学校代码publicstringBM_schoolName{get;set;}//已经报名学校名称publicstringschoolName{get;set;}//学校名称}

登陆的时候老师t=new老师();t.uName=textbox1.text;session["老师"]=t;

然后你需要用的时候直接用vart=session["老师"]as老师;//这样你在拿到t.uName就行了...

不需要用static
解决方案四:
初学者的典型错误。static整个进程只有一份,A登录GValues.uName是A,B登录GValues.uName变成B了。因为全局只有一份。都用session保存,或者直接查询数据库。
解决方案五:
Session["TeacherName"]你要是存教师的工号多好,根据不同工号查询相关内容。
解决方案六:
Quote: 引用2楼diaodiaop的回复:

这跟多少没什么关系...你一般应该这样设计[code=csharp]publicclass老师{publicstringuName{get;set;}//用户名publicintuCode{get;set;}//学校代码publicstringBM_schoolName{get;set;}//已经报名学校名称publicstringschoolName{get;set;}//学校名称}publicclass老师{publicstringuName{get;set;}//用户名publicintuCode{get;set;}//学校代码publicstringBM_schoolName{get;set;}//已经报名学校名称publicstringschoolName{get;set;}//学校名称}再咨询下这里publicclass老师{publicstaticstringuName{get;set;}//用户名publicstaticintuCode{get;set;}//学校代码publicstaticstringBM_schoolName{get;set;}//已经报名学校名称publicstaticstringschoolName{get;set;}//学校名称}这样写的话有问题没有?谢谢
解决方案七:
publicclass老师{publicstaticstringuName{get;set;}//用户名publicstaticintuCode{get;set;}//学校代码publicstaticstringBM_schoolName{get;set;}//已经报名学校名称publicstaticstringschoolName{get;set;}//学校名称}这样写也不行,除非只有一个老师。
解决方案八:
publicclassGValues{publicstringuName{get;set;}//用户名publicintuCode{get;set;}//学校代码publicstringBM_schoolName{get;set;}//已经报名学校名称publicstringschoolName{get;set;}//学校名称publicGValues(stringuName,intuCode,stringBM_schoolName,stringschoolName){this.uName=uName;this.uCode=uCode;this.BM_schoolName=BM_schoolName;this.schoolName=schoolName;}}不要用static,登陆的时候GValuesgvalues=newGValues(this.txtNum.Text.Trim(),...);//参数赋值Session["TeacherInformation"]=gvalues;//访问量小没大问题,如果访问量大就放到cache里Cache["TeacherInformation"]=gvalues;使用的时候强制转化下就好
解决方案九:
登陆等常用信息放在session或者cookie中
解决方案十:
引用6楼findcaiyzh的回复:
publicclass老师{publicstaticstringuName{get;set;}//用户名publicstaticintuCode{get;set;}//学校代码publicstaticstringBM_schoolName{get;set;}//已经报名学校名称publicstaticstringschoolName{get;set;}//学校名称}这样写也不行,除非只有一个老师。

publicclassGValues{publicGValues(){////TODO:在此处添加构造函数逻辑//}//登录系统用户名称publicstaticstringUserName{get{if(HttpContext.Current.Session["UserName"]==null){thrownewArgumentNullException("登录已过期,或没有进行正确的登录,请尝试重新登录!");}return(string)HttpContext.Current.Session["UserName"];}set{HttpContext.Current.Session["UserName"]=value;}}//学校代码publicstaticintSchoolCode{get{if(HttpContext.Current.Session["SchoolCode"]==null){thrownewArgumentNullException("登录已过期,或没有进行正确的登录,请尝试重新登录!");}return(int)HttpContext.Current.Session["SchoolCode"];}set{HttpContext.Current.Session["SchoolCode"]=value;}}}这样写可以吗?谢谢
解决方案十一:
9楼,我觉得可以。但是这种写法是属性的写法,又是静态的,给人感觉是还是静态属性,实际不是,是静态函数而已,可以改成静态函数,增加可维护性。另外Session可以接受任何类型的对象。就定义一个老师的类型publicclass老师{publicstringuName{get;set;}//用户名publicintuCode{get;set;}//学校代码publicstringBM_schoolName{get;set;}//已经报名学校名称publicstringschoolName{get;set;}//学校名称}注意,去掉了static.然后把老师的对象放到session里就可以了。读取老师object=HttpContext.Current.Session["Teacher"]as老师if(object==null)throw.....elseobject.SchoolCode...赋值老师object=new老师(){SchoolCode=...;....}HttpContext.Current.Session["Teacher"]=object
解决方案十二:
我本来的希望就是不同的用户登录,查询出来的数据就是不同用户自己的单位信息,不能看到别人的信息,但是登录就去后查询出来就有问题
解决方案十三:
public是全局,static是静态全局没问题,.net中尽量不要使用静态变量,除非你确定每个用户使用这个变量时都用同一个值比如数据库只有1个的时候,连接数据库用的字符串可以是静态的
解决方案十四:
static一定要慎用,最好不用,你可以用一个类来存放老师这个对象,然后用户登录之后把老师各个属性放到类中的各个字段,然后把这个类存放到Session中,用时取出来就行了
解决方案十五:
引用4楼wangnaisheng的回复:

Session["TeacherName"]你要是存教师的工号多好,根据不同工号查询相关内容。

这个说的比较清楚了

时间: 2024-10-19 06:48:17

asp.net全局变量问题的相关文章

ASP.Net全局变量的设置和读取方法_实用技巧

本文介绍两种ASP.Net项目中全局变量使用的方式.web.config文件 和 Gloab文件.以下分别说明: 方法一:web.config文件 --设置: 在web.config文件里添加关键字key是通过<appSettings>标记来实现的,但是appSettings标记通常放在<system.web>.....</system.web>标记外面.例:  <configration>  <appSettings>  <add key

asp入门教程:ASP applocation 全局变量与 Global.asa 文件

asp入门教程:ASP 全局变量 Global.asa 文件 Global.asa文件是一个可选文件,可以包含申报的对象,变量和方法,可以通过在每一页的ASP应用程序. -------------------------------------------------- ------------------------------ Global.asa文件 Global.asa文件是一个可选文件,可以包含申报的对象,变量和方法,可以通过在每一页的ASP应用程序.所有有效的浏览器的脚本( Java

ASP.Net两种全局变量设置和读取

本文介绍两种ASP.Net项目中全局变量使用的方式.web.config文件 和 Gloab文件.以下分别说明: 方法一:web.config文件 --设置: 在web.config文件里添加关键字key是通过<appSettings>标记来实现的,但是appSettings标记通常放在<system.web>.....</system.web>标记外面.例: <configration> <appSettings> <add key=&q

全局变量-如何实现点击统计,php或asp代码均可,不要用cookie和本地储存。

问题描述 如何实现点击统计,php或asp代码均可,不要用cookie和本地储存. 最好不涉及数据库以及Ajax,不要用cookie和本地储存.我的想法是一个按钮,点一次,按钮上就会提示被点了几次,不期望用全局变量,那样感觉麻烦..最好是利用文本文件来实现计数.. 解决方案 http://www.djxz.com/article/23381.htm

用php实现像JSP,ASP里Application那样的全局变量_php技巧

复制代码 代码如下: <?php /**  * 功能:实现像JSP,ASP里Application那样的全局变量  * author: [url]www.itzg.net[/url]  * version: 1.0  * 版权:如许转载请保留版权声明  */ /*+----------------example---------------------- require_once("Application.php"); $arr = array(0=>"Hi&qu

项目小结:日立OA系统(Asp.net)

前言   进入公司6个月后被安排到该项目中,据说该项目规模很大,而拆分到公司的就只是二十来个页面,而我就负责其中的3个页面和其他页面的脚本代 码,后来负责项目的性能优化工作.至于业务逻辑方面确实没什么可说的,就是CRUD.由一个很好沟通的前辈和我们6个新人一起来搞.这里有两项内容很值得 总结,它们都让我技术上增进不少.   目录 1.页面控件数庞大,页面加载极慢,一步一步优化吧! 2.一键关闭web系统所有页面,不断尝试,却被奇怪的方法Kill了. 3.总结   1.页面控件数庞大,页面加载极慢

夯实ASP.NET的基础 VB.NET脚本语言

asp.net|脚本     2.2.1  Visual Basic.NET简介     Visual Basic.NET(以下称VB.NET)作为ASP.NET的默认编程语言,不是简单的从VB6的版本上的升级, VB.NET内核代码几乎全部被重写,它是基于 .NET 框架重新设计的,您可以用它来轻松地创建用于微软操作系统和 Web 的下一代应用程序.使用 VB.NET,可视化开发 Web 应用程序.Web 服务.Windows 应用程序和服务器端组件将变得轻而易举.此外,VB.NET 使用了

ASP中变量的使用范围问题

ASP中变量的使用范围问题 <% dim a a = 10 function aa()   dim b   b = 5   response.write(a)'这里输出的是10,函数外部定义的变量可以称之为全局变量,在任何位置都有效,包含FUNCTION内部.SUB内部,CLASS内部   a = 5 '由于a是在aa外部定义的,所以这里对A的改动会影响到全局a的值 end function call aa() response.write(a) '这里输出的是5,因为a在AA函数内被改动了.

ASP.NET性能优化小结(ASP.NET&amp;amp;C#)

ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不