当前位置:首页
开发技术指南» 文章正文
    引言:

 ·各位考过70-316的大虾请进来    »显示摘要«
    摘要: 哪些复习资料比较不错啊?谢谢啦!分不够可以发短消息给我,另外开贴送,;) ......
    摘要: 请问开发一个类似下面的网站需要多少钱?谢谢! http://www.wxlife.net/happy/index.asp ......


200分求限制登陆人数的问题

如用户名A,允许这个账号同时登陆5个人  
  用户名B,允许此账号只能登陆1个人  
  用户名C,不限,  
  该如何实现呢  
   
  解决另开帖给100分

NO.1   作者: vme

Class   UserManager  
  {  
      private   static   manager;  
      private   Cache   cache;  
      private   UserManager()  
      {  
            cache   =   System.Web.HttpContext.Current.Cache;  
      }  
      public   static   UserManager   GetInstance()  
      {  
          if(manager   ==   null)  
              manager   =   new   UserManager();  
          return   manager;  
      }  
   
      public   bool   Login(string   username)  
      {    
            if(!CanLogin(username))  
                return   false;  
            cache.Add(...);//使用一个Guid来做key,username做值,这样就可以知道该帐号登陆的用户数。可以设置缓存时间,超时   Cache   会自动删除。  
            return   true;  
      }  
      private   bool   CanLogin(string   username)  
      {  
            return   ...  
      }  
  }

NO.2   作者: sp1234

1.   在每一个页面开始处理时,将此信息插入数据库。  
   
  2.   另有一个表:登录限制,用来保存3分钟之内同一登录名只能同时登录限制数量。后台有一个页面用于设置。  
   
  3.   为[登录信息]增加一个insert触发器,检查是否有冲突:    
   
  if   exists(  
  select   *   x.[登录名]   from  
      (select   [登录名],count(sessionID)   as   [并发数量]    
          from   [登录信息]   as   d    
          where   [当前时间]>dateadd(minute,-3,getdate())  
          group   by   [登录名])   as   x  
      inner   join   [登录限制]   as   y   on   x.[登录名]=y.[登录名]  
      where   x.[并发数量]>y.[最大并发数量]  
  )   begin  
      raiserror(已经达到最大并发数量,请3分钟之后再登录。,16,1)  
      roollback   tran  
      return  
  end  
   
  如果你不明白触发器的作用,把向[登录信息]表追加记录写入一个存储过程,并且在insert语句之后运行这段代码也可以。  
   
  不过存储过程可能被运行也可能不被运行,并且不同流程代码混杂在一起,不如一个个独立的触发器看得清楚,并且触发器可以保证任何时刻只要改写数据就会被执行,不可能被绕开,更好地保持数据库的一致性。


    摘要: 方法是通过网络访问,只让读,但没有删和写的权利。 机子的系统是win2000server。请高手指教! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE