高手请进----提问加散分

ocochi 2007-06-14 10:02:54
1>怎么样实现用户的重复登陆。现在的要求是如果一个用户登陆后,有其他用户使用其ID登陆,则需要报警。并立刻锁住这个帐号一段时间。现在的难点就出在了怎么能及时判断这个用户是在线的。

2>怎么样防止用户在短时间内频繁试密码?在页面上记录次数不行。因为可以关闭页面另开了再试的。

希望大家能够共享一下自己的心得和好的方法
...全文
546 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanjinping 2007-06-15
  • 打赏
  • 举报
回复
在数据库中增加一个状态字段
jingwei2007 2007-06-15
  • 打赏
  • 举报
回复
jf
hamehameha 2007-06-15
  • 打赏
  • 举报
回复
cookie+数据库放一个状态字段+加定时读取在线状态
tcjsrdn 2007-06-15
  • 打赏
  • 举报
回复
为什么总没有分
amandag 2007-06-14
  • 打赏
  • 举报
回复
1. 个人使用字段标识解决,小型应用应该还是能过得去的
2. 验证码 + 临时游客id(不少游戏网站是这样解决的)
Jinglecat 2007-06-14
  • 打赏
  • 举报
回复
1。
我选择数据库记录登陆信息,客户端通过 AJAX 隐藏刷新,
若超过时间得不到客户端请求,则从数据库清除此记录
当然,还是无法精确

2。
记录次数呗,锁定的时候,记录最后一次尝试时间,
下次尝试登陆的,与此时间判断
ocochi 2007-06-14
  • 打赏
  • 举报
回复
第一个问题:我知道现在在这个方面是有难度的。google都没有很好的实现。现在一般不都认为,google没有实现的功能在现阶段是无法实现的。只是希望大家能够通过讨论得到一个现阶段的一个比较好的。

第二个问题:肯定是可以解决的。但是如果用页面记数,那么重新打开页面就不行了
用图形验证。这个肯定是要加的。但不能更本解决这个问题。
用cook ,很容易被恶意修改。而且很有可能可户端关闭了这个。 放数据库中。时间是个问题。我的要求是在一段时间内不能过多的尝试登陆。而且我在数据库中无法实现来分辨尝试登陆的是在一个客户端上啊。
yudi010 2007-06-14
  • 打赏
  • 举报
回复
关于第二个
可不可以从cook里面判断呢
快乐的毛毛虫 2007-06-14
  • 打赏
  • 举报
回复
已经登录记录在数据库中,重复登录就锁定用户。
刺客 2007-06-14
  • 打赏
  • 举报
回复
jf
1,Cache;application;数据库记录状态.
2,验证码;数据记录当天登录次数,做个batchjob零点时登录次数清.
lonehare 2007-06-14
  • 打赏
  • 举报
回复
用Cache?最不稳定的就是它了,IIS是会自动强制清除的。

Web程序里做这个效果是非常难的,因为非常难判断一个用户是否退出。
tantj 2007-06-14
  • 打赏
  • 举报
回复
把信息放到数据库里面
zhangjingcheng 2007-06-14
  • 打赏
  • 举报
回复
最简单的方法就是给个字段
登陆的时候判断了
yezi_1105 2007-06-14
  • 打赏
  • 举报
回复
在数据库里加一字段IsOnline(Bool),当用户登录时,写为True,退出时,写为False,这样用户登录时就可以判断了,以前做过在线考试系统时,也出现过类似的情况
chuxue1342 2007-06-14
  • 打赏
  • 举报
回复
设置一个状态就可以了!
sibyle 2007-06-14
  • 打赏
  • 举报
回复
用这个你自己改改 忘了 是收集谁的代码了 你看看吧

------------------------

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间。这个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果,具体代码如下:

  放在登陆成功的地方:

string key = TextBox1.Text; //用户名文本框设为cache关键字
string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值
//判断cache中是否有用户的信息,如果没有相关的值,说明用户未登陆
if (uer == null || uer == String.Empty)
{
 //定义cache过期时间

 TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

 //第一次登陆的时候插入一个用户相关的cache值,
 HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);
 Session["ADMINID"] = TextBox1.Text;
 Response.Redirect("main.aspx");
}
else
{
 //重复登陆
 Response.Write("<script>alert('您的账号已经登陆!');window.location='login.aspx';</script>");
}
crossbet 2007-06-14
  • 打赏
  • 举报
回复
UP!这个问题值得关注
Jasonchen82 2007-06-14
  • 打赏
  • 举报
回复
1.用application..可以判断是否在线.

2.用文本记录或数据库记录一下..后做判断...
ken_flash 2007-06-14
  • 打赏
  • 举报
回复
最好是加个验证码

一是他频繁试起来比较麻烦
二是防止一些机器人程序,不断的试图进入你的网站
ken_flash 2007-06-14
  • 打赏
  • 举报
回复
也许你应该把这些东西记在数据库里
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧