zoukankan      html  css  js  c++  java
  • 【缓存】利用Cache防止同一帐号重复登录

    需求概要
    对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统。包括我目前的项目中同样有这一需求。
    其实要实现这个功能也不难,方法也有多种,比如用数据库来记录用户登录情况、用Application来保存用户登录信息、用Cache来保存信息等等。现在我们就来讨论一下如何利用缓存Cache方便地实现此功能。


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


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

    隐藏行号 复制代码 这是一段程序代码。
    1. private void Button1_Click(object sender, System.EventArgs e) 
    2.          { 
    3.  
    4.                 string strUser=string.Empty; 
    5.                 string strCacheKey = this.TextBox1.Text; 
    6.  
    7.                 strUser = Convert.ToString(Cache[strCacheKey]); 
    8.  
    9.                 if(strUser == string.Empty) 
    10.                 { 
    11.                     TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0); 
    12.  
    13.                     Cache.Insert(strCacheKey,strCacheKey,null,DateTime.MaxValue,SessTimeOut,CacheItemPriority.NotRemovable,null); 
    14.                     Session["User"] = strCacheKey; 
    15.                     this.Label1.Text = Session["User"].ToString(); 
    16.                 } 
    17.                 else 
    18.                 { 
    19.                     this.Label1.Text = "这?个?用?户?已?经?登?录?!?"; 
    20.                 } 
    21.          
  • 相关阅读:
    06-ajax发送请求-上传时注意事项
    02-git hooks是什么玩意?跟husky什么关系?
    SpringBoot配置热部署
    稀疏数组
    移动web开发——flex布局
    网站推荐
    ArrayList中的contains方法
    Java对象相等判断
    逻辑与(&)、短路与(&&)、逻辑或(|)、短路或(||)
    CentOS6.5下设置静态IP
  • 原文地址:https://www.cnblogs.com/jx270/p/4212262.html
Copyright © 2011-2022 走看看