身份验证用什么最稳定?为什么我设的Session不能保持?
我想做一个多人访问的网站,用的是ASP.NET 2008的,用的Session来保存用户的身份和状态,发布到网上发现大部用户可以正常访问,但一小部分用户的机器总是无易做图常登录,每次登录后都会象没登录一样,重新回到登录页(预设没登录自动跳到登录页)。请各位大侠帮忙分析下,是什么原因?用什么方法更好?附代码如下
string getUID = Request.QueryString["UID"].ToString();
string getPWD = Request.QueryString["PWD"].ToString();
Response.ContentType = "text/xml";
//-------------
SqlConnection Conn = new SqlConnection(MyConnectionString);
string queryString = "SELECT UserID, Pwd, Name, uRole, isTry, LoginCount,EndDTime,AllowUse,getdate() as DTNowDate FROM UserInfo " +
" WHERE (UserID =@UID)";
SqlCommand Command = new SqlCommand();
Command.Connection = Conn;
Command.CommandType = CommandType.Text;
Command.CommandText = queryString;
SqlParameter Parameter_userid = new SqlParameter();
Parameter_userid.ParameterName = "@UID";
Parameter_userid.Value = getUID;
Parameter_userid.DbType = DbType.StringFixedLength;
Command.Parameters.Add(Parameter_userid);
Boolean isHaveID = false;
Boolean isLogin = false;
Conn.Open();
try
{
SqlDataReader Rd = Command.ExecuteReader();
if (Rd.Read())
{
if (Rd["Pwd"].ToString().Trim() == getPWD.Trim())
{
DateTime fDTNowDate = (DateTime)Rd["DTNowDate"];
DateTime fEndDTime = (DateTime)Rd["EndDTime"];
Boolean fAllowUse = (Boolean)Rd["AllowUse"];
fisTry = (Boolean)Rd["isTry"];
fLoginCount = Rd["LoginCount"].ToString();
isLogin = true;//密码通过,下面还要进行其它验证
resuInfo = "OK";
string UqueryString = "";
//1.是否试用,第一次登录---暂 不进行检查 到期与限制
if (fisTry & fLoginCount == "0")
{
//从当前时间更改到期+ 15天
//UqueryString = "UPDATE UserInfo SET LastDTime=getdate(),LoginCount=LoginCount+1,EndDTime=getdate()+15 WHERE UserID=@UserID ";
UqueryString = "UPDATE UserInfo SET LastDTime=getdate(),LoginCount=LoginCount+1,EndDTime=getdate()+tryDays WHERE UserID=@UserID ";
}
else
{
UqueryString = "UPDATE UserInfo SET LastDTime=getdate(),LoginCount=LoginCount+1 WHERE UserID=@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>
<sessionState mode="InProc" timeout="30"/>//修改timeout时间
</system.web> --------------------编程问答-------------------- <sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
必须有的属性是
属性 选项 描述
mode 设置将Session信息存储到哪里
Off 设置为不使用Session功能
InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。
StateServer 设置为将Session存储在独立的状态服务中。
SQLServer 设置将Session存储在SQL Server中。
--------------------编程问答-------------------- --------------------编程问答-------------------- TO chengqscjh:
我用的是 <sessionState mode="StateServer" /> 资料上说是可以保存在独立进程中,比较稳定
如果用的是Cookie的话,如果用户关闭浏览器的Cookie,会不会出问题呢? --------------------编程问答--------------------
==
从ASP.NET 1.1 Session就支持无Cookie的回话,此时Sessonid保存在用户的url地址栏里 --------------------编程问答-------------------- To amandag:
这是我用的Web.config部分
<sessionState mode="StateServer" />
。。。
<authentication mode="Window" />
但有部分计算机登录时出现问题。 --------------------编程问答-------------------- <sessionState mode="Off ¦InProc ¦StateServer ¦SQLServer"
cookieless="true ¦false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
必须有的属性是
属性 选项 描述
mode 设置将Session信息存储到哪里
Off 设置为不使用Session功能
InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。
StateServer 设置为将Session存储在独立的状态服务中。
SQLServer 设置将Session存储在SQL Server中。
--------------------编程问答-------------------- TO lingxyd_0:
这个楼上发过了 --------------------编程问答-------------------- COOKIE这个好用些,你要是用SQLSERVER做又要加好多的东西
--------------------编程问答-------------------- (1)Cookie很多用户会禁用,这是部分用户不能使用的原因。如果你在写Cookie时进行验证,则基本不存在什么问题了。
(2)SQL Server麻烦一些,但保证一定都可以。 --------------------编程问答-------------------- session mode=sqlserver
--------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 可以用cookie. --------------------编程问答-------------------- --------------------编程问答-------------------- 用传票吧,基于cookie的,又比cookie安全性高 --------------------编程问答--------------------
传票让我想到了易做图................. --------------------编程问答-------------------- 这个不太清楚,个人一直用Session
补充:.NET技术 , ASP.NET