随笔-92  评论-305  文章-1  trackbacks-36


以下方法有缺陷,请参见我的另一篇文章《利用Cache、Timer(ATLAS)控制用户重复登陆的可行性方法

网上看到可用Cache来判断用户是否已登陆的方法,感觉还不错。实验后,特此分享代码

原理比较简单:
判断cache中是否已存在规定的客户登陆字符串,如果没有便添加,同时指定其在cache中的保存时间。重复登陆时,便能通过判断cache值是否为空来判断用户是否重复登陆了。


            //生成Key   
            string sKey = TextBox1.Text + "_IsLogin";
            
//得到Cache中的给定Key的值   
            string sUser = Convert.ToString(Cache[sKey]);

            
//检查是否存在   
            if (sUser == null || sUser == String.Empty)
            
{
                
//Cache中没有该Key的项目,表明用户没有登录,或者已经登录超时      
                
//TimeSpan 表示一个时间间隔,获取系统对session超时作的设置值
                
//TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
                
//(如果考虑到允许用户再次登陆的时间小于session超时时间,可将此值设小,在此示例中设置为一分钟) 
                TimeSpan SessTimeOut = new TimeSpan(00100);
                HttpContext.Current.Cache.Insert(sKey, sKey, 
null, DateTime.MaxValue, SessTimeOut,
                                                 System.Web.Caching.CacheItemPriority.NotRemovable, 
null);
                
//首次登录,您可以做您想做的工作了。   
                Label1.Text = "你好!欢迎光临";
            }

            
else
            
{
                
//在Cache中发现该用户的记录,表名已经登录过,禁止再次登录   
                Label1.Text = "对不起,你已在别处登陆.或者在1分钟后重试";
                
return;
            }


posted on 2006-12-14 09:30 网际浪人 阅读(696) 评论(4)  编辑 收藏 网摘 所属分类: ASP.Net

评论:
#1楼 2006-12-14 12:39 | 小菜[匿名][未注册用户]
TO網際浪人
我把你的代碼加入我的程序中,不知為什麼總是執行不了。總是跳轉到ELSE執行代碼如下
///验证用户合法性,并跳转到系统平台
if((userId != null) && (userId != ""))
{


Session["UserID"] = userId;
String sUser=Convert.ToString(Cache[userId]);
if ((sUser==null) && (sUser==string.Empty ))
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, 1, 0, 0);
HttpContext.Current.Cache.Insert(userId, userId, null, DateTime.MaxValue, SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable, null);
//跳转到登录后的第一个页面
Response.Redirect("~/DesktopModules/Main.aspx");
}
else
{
Message.Text = "你的用户已登陸,请稍後重試!";
}
}

  回复  引用    
#2楼 2006-12-14 20:10 | 网际浪人[匿名]
@小菜[匿名]
以上的代码成功执行一次后,Cache中已经有了 Cache[userId] 的值,按代码要求设置的保持时间是1分钟。
所以要测试效果的话,需要等待1分钟之后。再执行此方法即可!
你再试试

  回复  引用    
#3楼 2007-01-08 23:58 | 沧海·旭日[匿名][未注册用户]
但是如果失效时间设置短了,恶意登陆者又会在较短的时间内重新登陆,而且成功通过检验。
这句话什么意思,你是说他没事反复登陆还是,短时间再次登陆以达到同一账号同时在线吗?如果是前者,加验证码就可以了嘛,后者还没弄明白是不是可以通过这样的方式达到。

  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 591691




相关文章:

相关链接: