问题描述
我用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