问题描述
我想做一个多人访问的网站,用的是ASP.NET2008的,用的Session来保存用户的身份和状态,发布到网上发现大部用户可以正常访问,但一小部分用户的机器总是无法正常登录,每次登录后都会象没登录一样,重新回到登录页(预设没登录自动跳到登录页)。请各位大侠帮忙分析下,是什么原因?用什么方法更好?附代码如下stringgetUID=Request.QueryString["UID"].ToString();stringgetPWD=Request.QueryString["PWD"].ToString();Response.ContentType="text/xml";//-------------SqlConnectionConn=newSqlConnection(MyConnectionString);stringqueryString="SELECTUserID,Pwd,Name,uRole,isTry,LoginCount,EndDTime,AllowUse,getdate()asDTNowDateFROMUserInfo"+"WHERE(UserID=@UID)";SqlCommandCommand=newSqlCommand();Command.Connection=Conn;Command.CommandType=CommandType.Text;Command.CommandText=queryString;SqlParameterParameter_userid=newSqlParameter();Parameter_userid.ParameterName="@UID";Parameter_userid.Value=getUID;Parameter_userid.DbType=DbType.StringFixedLength;Command.Parameters.Add(Parameter_userid);BooleanisHaveID=false;BooleanisLogin=false;Conn.Open();try{SqlDataReaderRd=Command.ExecuteReader();if(Rd.Read()){if(Rd["Pwd"].ToString().Trim()==getPWD.Trim()){DateTimefDTNowDate=(DateTime)Rd["DTNowDate"];DateTimefEndDTime=(DateTime)Rd["EndDTime"];BooleanfAllowUse=(Boolean)Rd["AllowUse"];fisTry=(Boolean)Rd["isTry"];fLoginCount=Rd["LoginCount"].ToString();isLogin=true;//密码通过,下面还要进行其它验证resuInfo="OK";stringUqueryString="";//1.是否试用,第一次登录---暂不进行检查到期与限制if(fisTry&fLoginCount=="0"){//从当前时间更改到期+15天//UqueryString="UPDATEUserInfoSETLastDTime=getdate(),LoginCount=LoginCount+1,EndDTime=getdate()+15WHEREUserID=@UserID";UqueryString="UPDATEUserInfoSETLastDTime=getdate(),LoginCount=LoginCount+1,EndDTime=getdate()+tryDaysWHEREUserID=@UserID";}else{UqueryString="UPDATEUserInfoSETLastDTime=getdate(),LoginCount=LoginCount+1WHEREUserID=@UserID";//2.是否到期:帐号已到期,请续费if(fDTNowDate>fEndDTime){//帐号到期resuInfo="帐号已到期,请续费";isLogin=false;}else{//3.是否被限制:此帐号已被限制if(!fAllowUse){//被限制resuInfo="此帐号已被限制";isLogin=false;}}}if(isLogin){Session["UName"]=Rd["Name"].ToString();Session["URole"]=Rd["uRole"].ToString();Session["UID"]=getUID;Session["isLogin"]="TRUE";Session["PID"]="P01";//初始文章}}else{resuInfo="密码不正确";}}else{resuInfo="帐号不正确"+getUID;}}finally{if(Conn!=null){Conn.Close();}}
解决方案
解决方案二:
如果时间保持长的话可以用cookie,用session的时候,要设置持续时间,具体修改方法如下,在web.config中进行如下配置<system.web><sessionStatemode="InProc"timeout="30"/>//修改timeout时间</system.web>
解决方案三:
<sessionStatemode="Off|InProc|StateServer|SQLServer"cookieless="true|false"timeout="numberofminutes"stateConnectionString="tcpip=server:port"sqlConnectionString="sqlconnectionstring"stateNetworkTimeout="numberofseconds"/>必须有的属性是属性选项描述mode设置将Session信息存储到哪里Off设置为不使用Session功能InProc设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。StateServer设置为将Session存储在独立的状态服务中。SQLServer设置将Session存储在SQLServer中。
解决方案四:
解决方案五:
TOchengqscjh:我用的是<sessionStatemode="StateServer"/>资料上说是可以保存在独立进程中,比较稳定如果用的是Cookie的话,如果用户关闭浏览器的Cookie,会不会出问题呢?
解决方案六:
引用4楼gxywl的回复:
TOchengqscjh:我用的是<sessionStatemode="StateServer"/>资料上说是可以保存在独立进程中,比较稳定如果用的是Cookie的话,如果用户关闭浏览器的Cookie,会不会出问题呢?
==从ASP.NET1.1Session就支持无Cookie的回话,此时Sessonid保存在用户的url地址栏里
解决方案七:
Toamandag:这是我用的Web.config部分<sessionStatemode="StateServer"/>。。。<authenticationmode="Window"/>但有部分计算机登录时出现问题。
解决方案八:
<sessionStatemode="Off¦InProc¦StateServer¦SQLServer"cookieless="true¦false"timeout="numberofminutes"stateConnectionString="tcpip=server:port"sqlConnectionString="sqlconnectionstring"stateNetworkTimeout="numberofseconds"/>必须有的属性是属性选项描述mode设置将Session信息存储到哪里Off设置为不使用Session功能InProc设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。StateServer设置为将Session存储在独立的状态服务中。SQLServer设置将Session存储在SQLServer中。
解决方案九:
TOlingxyd_0:这个楼上发过了
解决方案十:
COOKIE这个好用些,你要是用SQLSERVER做又要加好多的东西
解决方案十一:
(1)Cookie很多用户会禁用,这是部分用户不能使用的原因。如果你在写Cookie时进行验证,则基本不存在什么问题了。(2)SQLServer麻烦一些,但保证一定都可以。
解决方案十二:
sessionmode=sqlserver
解决方案十三:
学习
解决方案十四:
可以用cookie.
解决方案十五:
解决方案:
用传票吧,基于cookie的,又比cookie安全性高
解决方案:
引用15楼Pig23的回复:
用传票吧,基于cookie的,又比cookie安全性高
传票让我想到了法院.................
解决方案:
这个不太清楚,个人一直用Session