问题描述
解决netsession登陆用户数量多,用户乱窜的问题。就是公司内部开发的网站系统,用户注册采用session存储用户信息,但是发现用户登录数量多了后就存在用户乱窜,甲的信息是乙,乙的信息是丙。不知道是IIS原因,还是源代码问题。//验证登陆login.aspxfunctionCheckLogin(username,userpwd,auto){if(GetReferById('login_smt'))GetReferById('login_smt').disabled=true;if(username==undefined)username=GetReferById('login_username').value;if(userpwd==undefined)userpwd=GetReferById('login_userpwd').value;if(auto==undefined)auto=false;if(username==''){alert('请输入用户名。');GetReferById('login_smt').disabled=false;GetReferById('login_username').focus();return;}if(userpwd==''){alert('请输入密码。');GetReferById('login_smt').disabled=false;GetReferById('login_userpwd').focus();return;}//alert(auto);varpm='name='+escape(username)+'&pwd='+escape(userpwd)+'&auto='+auto;//alert(pm);alert(pm);_ajax('/server/login.asmx/CheckLogin',callback,true,pm);}functioncallback(str){if(GetReferById('login_smt'))GetReferById('login_smt').disabled=false;alert(str);varuser=Xml2Hash(str);if(user==null){alert('系统错误,请稍候再试。');return;}if(user.Id==undefined){alert('登录失败,用户名或密码错误,请重新输入');return;}if(user.role!=_sysRole){alert('您不是管理员,请勿非法登录。');GetReferById('login_username').value='';GetReferById('login_userpwd').value='';return;}location.href='/manage/';}user.cs文件内容usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Web;usingSystem.Web.Security;usingSystem.Data;usingSystem.Data.SqlClient;namespaceAbcSC{publicpartialclassUser{publicUserCheckLogin(){try{intuid=Convert.ToInt32(HttpContext.Current.Request.Cookies["user"]["userid"]);intauto=Convert.ToInt32(HttpContext.Current.Request.Cookies["user"]["isauto"]);if(uid>0&&auto==1){returnSetLoginSession(uid,true);}}catch(Exceptionex){SystemError.CreateErrorLog(ex.Message);}returnnull;}///<summary>//////</summary>///<paramname="uid"></param>///<paramname="isauto"></param>///<returns></returns>privateUserSetLoginSession(intuid,boolisauto){HttpContext.Current.Session["userid"]=null;try{Useruser=newUser(uid);HttpContext.Current.Response.Cookies.Remove("user");HttpContext.Current.Response.Cookies["user"].Expires=DateTime.Now.AddYears(1);HttpContext.Current.Response.Cookies["user"]["userid"]=uid.ToString();HttpContext.Current.Session["userid"]=uid.ToString();HttpContext.Current.Response.Cookies["user"]["isauto"]=(isauto?"1":"0");returnuser;}catch(Exceptionex){HttpContext.Current.Response.Write("设置session错误:"+ex.Message);returnnull;}}///<summary>//////</summary>///<paramname="name"></param>///<paramname="pwd"></param>///<paramname="isauto"></param>///<returns></returns>publicUserCheckLogin(stringname,stringpwd,boolisauto){stringcmdText=string.Format("selecttop1*fromt_UserswhereNickName='{0}'andPwd='{1}'",name,AbcTools.MD5_16(pwd));try{DataTabledataTable=AbcTools.RunSQLToTable(cmdText);if(dataTable.Rows.Count>0){intuid=Convert.ToInt32(dataTable.Rows[0][0]);//设置Cookies//HttpContext.Current.Response.Cookies["user"]["userid"]=uid.ToString();HttpContext.Current.Session["userid"]=null;returnSetLoginSession(uid,isauto);}}catch(Exceptionex){SystemError.CreateErrorLog(ex.Message);HttpContext.Current.Response.Write("登录验证错误:"+ex.Message);}returnnull;}publicintSessionUserId{get{intuid=0;if(HttpContext.Current.Session["userid"]!=null){Int32.TryParse(HttpContext.Current.Session["userid"].ToString(),outuid);}returnuid;}}publicintGetSessionUserId(){intuid=0;try{if(HttpContext.Current.Session["userid"]!=null){Int32.TryParse(HttpContext.Current.Session["userid"].ToString(),outuid);}}catch(Exceptionex){SystemError.CreateErrorLog("获取SessionId出错:"+ex.Message);}returnuid;}}}
解决方案
解决方案二:
自己顶下。希望哪个位高手指点,积分可增多。谢谢!
解决方案三:
看一下这个,应该就有解决思路了http://blog.csdn.net/wmj2003/article/details/2601802
解决方案四:
一般这种问题发生在不同用户在同一浏览器中登陆,用cache记录一下在线用户用sessionID判断