利用Cache防止同一帐号重复登录

需求概要
对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统。包括我目前的项目中同样有这一需求。

其实要实现这个功能也不难,方法也有多种,比如用数据库来记录用户登录情况、用Application来保存用户登录信息、用Cache来保存信息等等。现在我们就来讨论一下如何利用缓存Cache方便地实现此功能。

解决方法
我们都知道Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户;而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。

我们只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用户已登录。具体实现请看下例:

None.gif          private   void  Button1_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif
InBlock.gif                
string strUser=string.Empty;
InBlock.gif                
string strCacheKey = this.TextBox1.Text;
InBlock.gif
InBlock.gif                strUser 
= Convert.ToString(Cache[strCacheKey]);
InBlock.gif
InBlock.gif                
if(strUser == string.Empty)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    TimeSpan SessTimeOut 
= new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
InBlock.gif
InBlock.gif                    Cache.Insert(strCacheKey,strCacheKey,
null,DateTime.MaxValue,SessTimeOut,CacheItemPriority.NotRemovable,null);
InBlock.gif                    Session[
"User"= strCacheKey;
InBlock.gif                    
this.Label1.Text = Session["User"].ToString();
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
this.Label1.Text = "这个用户已经登录!";
ExpandedSubBlockEnd.gif                }

InBlock.gif        
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif        }

原貼:http://www.cnblogs.com/Hanks/archive/2005/03/26/126391.html?Pending=true#Post
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值