1>怎么样实现用户的重复登陆。现在的要求是如果一个用户登陆后,有其他用户使用其ID登陆,则需要报警。并立刻锁住这个帐号一段时间。现在的难点就出在了怎么能及时判断这个用户是在线的。2>怎么样防止用户在短时间内频繁试密码?在页面上记录次数不行。因为可以关闭页面另开了再试的。  希望大家能够共享一下自己的心得和好的方法

解决方案 »

  1.   

    1:研究下SSO
    2:超过次数后记录其IP,禁止当天再访问
      

  2.   

    (1)这个问题讨论过很多次了。在web中,没有很准确的解决这个问题的方法!大都是一个大概的。(2)第二个问题,用户访问站点时给一个零时的游客id,然后记录他登陆错误的次数,大概差不多可以解决你的问题。
      

  3.   

    1.用application..可以判断是否在线.2.用文本记录或数据库记录一下..后做判断...
      

  4.   

    用这个你自己改改 忘了 是收集谁的代码了 你看看吧------------------------要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个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>");
    }
      

  5.   

    在数据库里加一字段IsOnline(Bool),当用户登录时,写为True,退出时,写为False,这样用户登录时就可以判断了,以前做过在线考试系统时,也出现过类似的情况
      

  6.   

    用Cache?最不稳定的就是它了,IIS是会自动强制清除的。Web程序里做这个效果是非常难的,因为非常难判断一个用户是否退出。
      

  7.   

    jf
    1,Cache;application;数据库记录状态.
    2,验证码;数据记录当天登录次数,做个batchjob零点时登录次数清.
      

  8.   

    关于第二个
    可不可以从cook里面判断呢
      

  9.   

    第一个问题:我知道现在在这个方面是有难度的。google都没有很好的实现。现在一般不都认为,google没有实现的功能在现阶段是无法实现的。只是希望大家能够通过讨论得到一个现阶段的一个比较好的。第二个问题:肯定是可以解决的。但是如果用页面记数,那么重新打开页面就不行了
                                  用图形验证。这个肯定是要加的。但不能更本解决这个问题。
                                  用cook ,很容易被恶意修改。而且很有可能可户端关闭了这个。                          放数据库中。时间是个问题。我的要求是在一段时间内不能过多的尝试登陆。而且我在数据库中无法实现来分辨尝试登陆的是在一个客户端上啊。
      

  10.   

    1。
    我选择数据库记录登陆信息,客户端通过 AJAX 隐藏刷新,
    若超过时间得不到客户端请求,则从数据库清除此记录
    当然,还是无法精确2。
    记录次数呗,锁定的时候,记录最后一次尝试时间,
    下次尝试登陆的,与此时间判断
      

  11.   

    cookie+数据库放一个状态字段+加定时读取在线状态