注册 登录
编程论坛 ASP.NET技术论坛

[求助]怎么实现用户的登录次数

zhishiouran 发布于 2007-06-08 10:25, 1809 次点击
vs2003,在登录界面中,怎么实现用户的登录次数,也就是当用户输入三次以后,用户名或密码不正确,就会把登录界面关掉.有那位大虾能帮助?谢谢了
13 回复
#2
川流不息2007-06-08 10:34

你在登錄頁面設個全局變量不就行了,一次不成功就加一,加到三就關閉窗體。

#3
rainic2007-06-08 10:58

全局變量怎么设的啊/.?

#4
川流不息2007-06-08 11:09

就是頁面用的全局變量,不用其他地方用,因為你只是在登錄失敗後就直接放棄了。所以,只需在登錄的頁面設就行了。

#5
rainic2007-06-08 11:51
我是问怎么设...?

static吗?
#6
川流不息2007-06-08 11:55

不好意思,這個我還沒試過,不過在做的時候可以試一下,應該沒多大功夫吧。

#7
rainic2007-06-08 12:39
晕....你自己都没试过啊./??.
#8
川流不息2007-06-08 13:34
暈,不是吧,一個全局變你都要我去試。我只是來提供我的思路的。
#9
铲铲2007-06-09 17:58

这种所谓"输入三次错误"就锁定窗体不让登陆,那么输入三次错误是指在多大时间间隔上的计数?那么解除限制的范围是多大?

在.NET中没有“全局变量”的说法,但是可以使用静态变量来保存值。

在类中声明一个public static int xxx的变量。

但是接下来的问题是:这个静态变量不是针对某个会话。这将导致你的网站无论对谁,允许输入三次错误,之后无论是谁都无法登陆你的网站。

最佳的做法是:根据你所述“三次”的限制在多大范围内发生?在多大范围或多长时间尺度上能解除掉(总不能让用户再也不能登陆吧?)
这样,可以考虑将其放置在Session对象中。每一个Session对应一个用户会话,其他用户不受影响。但是用户如果新开一个浏览器再访问,相当于新建一个会话,用户可重复新开浏览器来规避你的限制。

或者将其发送到Cookie中,通过设置Cookie的过期时间来限制用户登陆在多大范围内解锁。但是Cookie可以在客户端被禁用、删除或修改。

或者将登陆次数记录在数据库或其他永久存储位置,当然你得不厌其烦地去处理那些受限的用户,手动帮他们解锁。
如果你不想麻烦的话,可以创建Windows服务,配置在服务器上运行,设定计时器在规定时间间隔引发事件控制解锁。

在ASP.NET中不要尝试使用静态变量来存储内容。更不要把希望保持的值存储在对象中的变量中,因为每次请求,都是实例化新对象,值会丢失。应该使用ViewState、Session等途径来保持值。至于他们的生命周期,使用范围,那就自己学习吧

#10
zhishiouran2007-06-10 08:10

我想在登录代码中,设置个循环来做。但我不知道怎么设置cookie。我在google中搜索这样的代码,但根本就没有,不知哪位大虾能提供一个具体的代码?谢谢!

#11
rainic2007-06-12 10:19
川流不息

你在哪家公司工作呀?
#12
川流不息2007-06-12 10:46
我?我在中山。跟你的浪漫之城只有十來分鐘的路了。這裡不能聊,沒事發個短信來。或發郵件也行。
#13
大连乖乖猫2007-06-12 17:21

完整版的
public static int i=0;
private void button1_Click(object sender, EventArgs e)
{
try
{
if (textBox1.Text.Trim() == "" && textBox2.Text.Trim() == "")
{
MessageBox.Show("请输入完整信息");
}
else
{
string name, pwd;
name = textBox1.Text;
pwd = textBox2.Text;
SqlConnection con = new SqlConnection("server=192.168.1.58;database=goods;uid=sa;pwd=;");
SqlDataAdapter da = new SqlDataAdapter("select name from employee where name='" + name + "'", con);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
SqlDataAdapter da1 = new SqlDataAdapter("select * from employee where name='" + name + "' and pwd='"+pwd+"'", con);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
if (ds1.Tables[0].Rows.Count > 0)
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("密码错误重新输入");
i++;
if (i > 3)
{
this.Close();
}
}
}
else
{
i++;
if (i > 3)
{
this.Close();
}
else
{
MessageBox.Show("该用户名不存在");
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

#14
大连乖乖猫2007-06-12 17:23
这是winform,听你的意思好像是做的winform。 Asp的其中有个控件提供验证,很简单。
1