CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

如何防止同一帐户重复登录系统?

楼主bjy3199()2004-08-03 17:45:20 在 .NET技术 / ASP.NET 提问

我用C#开发了一个MIS,但不能控制客户端使其用同一帐户重复登录系统.请大侠赐教! 问题点数:100、回复次数:45Top

1 楼owenbeckham()回复于 2004-08-03 17:54:35 得分 0

第一次,进去,付个值,  
      如后再进,先判断,不就可以了吗??  
  Top

2 楼tvrxk(魏強)回复于 2004-08-03 17:54:47 得分 0

在数据库中创建一个表管理登录用户信息。如果用户退出系统就删除用户Top

3 楼owenbeckham()回复于 2004-08-03 17:54:55 得分 0

不过还是再帮你up............  
  Top

4 楼KeepOn(KeepOn)回复于 2004-08-03 17:55:16 得分 0

ApplicationTop

5 楼jijl2001(jijl2001)回复于 2004-08-03 19:33:54 得分 0

Application  
  上面的不要瞎说Top

6 楼vitamin_ok(水水|Eddie(vitamin_ok@mail.csdn.net))回复于 2004-08-03 19:37:20 得分 0

如果非正常退出,你能保证能够正常删除管理登陆用户的信息么??  
   
  我也觉得应该是ApplicationTop

7 楼cooleader123(cooleader)回复于 2004-08-03 19:39:03 得分 0

在数据库User表里面设一个online的字段登录一个把他置1,用户离开的时候置0就行了Top

8 楼sand1602(沙)回复于 2004-08-03 19:46:42 得分 0

在数据库里设计一个OnLine表,以Session.SessionID作为主键,在global.cs中的Session_Start中把当前用户添入OnLine表中,用户名设为guest,在Session_End中移除.用户登陆时,首先检测OnLine表中有无这个用户,没有则通过验证.当用户登陆后,更改OnLine表中的用户名.Top

9 楼sand1602(沙)回复于 2004-08-03 19:48:26 得分 0

不要用Application,在编程中尽量不要用它.你想想,当几千人在线时,服务器负担太重了Top

10 楼wwh207(活死人)回复于 2004-08-03 19:49:39 得分 0

用session值来判断,当用户登陆时,判断相应的session是否为空来确定用户是否重复登陆。  
  我是这样做的,当然,要记住用户退出时,一定要清除该用户的session值。Top

11 楼shangwg(shangwg)回复于 2004-08-03 19:56:02 得分 0

借鉴一下MSN的做法比较科学。Top

12 楼wanghuhua(白衣修罗)回复于 2004-08-03 20:09:57 得分 0

一般用session好点Top

13 楼leeyeefeng2004(leeyeefeng)回复于 2004-08-03 20:19:44 得分 0

还是使用江湖上还有人用的<踢人大法~~~吧>  
  Top

14 楼cnlamar(无中生有)回复于 2004-08-03 20:58:11 得分 0

维护一online表,查看有登陆,就不允许再次登陆,以sessionid作为唯一标识符号,也可以产生一个GUID发到COOKIE中,以区分不同的CLIENT,再佐以JS,可以达到更好的效果,比如离开后自动离线Top

15 楼softchao(小款※人生就像大便, 往往努力了半天却只迸出几个屁 )回复于 2004-08-03 21:23:22 得分 0

楼上的方法都可行   大致三种方法   我都用过  
  1.在数据库中加标识字段   FLAG   通过0   1   来判断是   否已经登录  
  2.通过Session   这个方法比较好   不过最好能有JS代码   没过多少分钟自动刷新一次   以防过期  
  3.Application   这个方法我认为是最正统的方法   在WEB.CONFIG里面添加节  
  Top

16 楼eboywy(飞影)回复于 2004-08-04 08:50:55 得分 0

1.在数据库中加标识字段   FLAG   通过0   1   来判断是   否已经登录  
  2.通过Session   这个方法比较好   不过最好能有JS代码   没过多少分钟自动刷新一次   以防过期  
  3.Application   这个方法我认为是最正统的方法   在WEB.CONFIG里面添加节  
  Top

17 楼luckweb(冰川)回复于 2004-08-04 08:57:57 得分 0

Session方法是个不错的选择,不过因为Session最少要20分钟后才关闭  
  所以异常退出后,会出现不能立即再登录的情况Top

18 楼andrawsky(国际米兰)回复于 2004-08-04 09:10:41 得分 0

在数据库中创建一个表管理登录用户信息。如果用户退出系统就删除用户  
   
  Top

19 楼litp(天道酬勤)回复于 2004-08-04 09:18:28 得分 0

up  
  Top

20 楼wolve(祝你生活愉快)回复于 2004-08-04 09:25:46 得分 0

用数据库的人最好想清楚,如果你的系统在用户没用logout之前就崩掉了,你根本没有机会来设flag,这样这个用户其不是永远不能正常登录。  
  我建议放在application里,像这样的MIS系统,用户量根本不大,就算有1W个用户同时在线,你仅仅是在application里存几个简单的String,根本没有什么性能的影响。Top

21 楼yujia120(永不停息)回复于 2004-08-04 09:27:12 得分 0

online表  
  登陆了insert  
  离开了deleteTop

22 楼NEW1981(埃艾斯皮点耐持)回复于 2004-08-04 09:40:56 得分 0

用数据库的人最好想清楚,如果你的系统在用户没用logout之前就崩掉了,你根本没有机会来设flag,这样这个用户其不是永远不能正常登录。  
  我建议放在application里,像这样的MIS系统,用户量根本不大,就算有1W个用户同时在线,你仅仅是在application里存几个简单的String,根本没有什么性能的影响。  
   
  说的对Top

23 楼Jinniu(金牛)回复于 2004-08-04 09:53:42 得分 0

维护一张在线用户列表!  
  虽然不是十分准确,但是如果用户都正常退出的话,列表信息还是十分准确的;如果用户非正常退出,那么他如果想马上再次登录就比较郁闷了!:)Top

24 楼smilex(我是小虾米!!!!!)回复于 2004-08-04 10:57:20 得分 0

同意wolveTop

25 楼david6242(david 锋)回复于 2004-08-04 11:06:59 得分 0

这些都是不完善的做法。  
  有没有好点的??我在等等。。。Top

26 楼exceedzzh(阿华)回复于 2004-08-04 12:15:25 得分 0

用Session好,重载后不保留!Top

27 楼xjp0000(xjp0000)回复于 2004-08-04 17:27:01 得分 0

upTop

28 楼dcren118(酒仙)回复于 2004-08-04 17:45:08 得分 0

存储过程   做最好!~  
  Top

29 楼tjj36(忧郁的眼睛)回复于 2004-08-04 18:13:40 得分 0

没有好的方法,只有在数据库中,用表(userid,lasttime)标记,设置在页面几分钟(看情况短的比较好一点)内更新lasttime,如果注销或关闭窗口,删除此记录。而在登录页面,可以用存储过程,判断是否getdate()>dataAdd(minute,1)即可。当然也可以使用作业吗?不过不太好。。。Top

30 楼CSDNATM(飞行员,麻烦帮开个窗让我透透气)回复于 2004-08-04 18:44:34 得分 0

在数据库里做个标志  
  Top

31 楼maxwelling(鸟山冥)回复于 2004-08-04 18:49:00 得分 0

好象是个问题?收藏先!Top

32 楼systemspy(think.net)回复于 2004-08-04 19:00:52 得分 0

当然是在用户表中加一个标记了  
   
  session_start  
  设置为1  
  Session_End  
  设置为0  
   
  不过用户非法退出的话  
   
  只有等到  
   
  Session   超时了Top

33 楼cnlamar(无中生有)回复于 2004-08-04 19:11:51 得分 0

我一般也放内存里,放数据库不太好。  
   
  缩短时间,可以减少非法退出立即登陆出现的问题所带来的麻烦程度,也可以针对IP或者别的信息,甚至是一些信息组合,来确定是否可以踢出以前的在线数据,重复登陆。Top

34 楼yujia120(永不停息)回复于 2004-08-09 18:24:35 得分 0

还有没有好办法  
  楼上说用SESSION的,怎么样在服务器端主动将用户的连接断开呢  
   
  UP一下Top

35 楼yukingwq(古鲁)回复于 2004-08-09 18:48:15 得分 100

请参考!  
   
  public   virtual   void   Application_Start(object   sender,   EventArgs   e)  
  {  
  //   reset   the   mailer   indicator  
  Application["MailerStatus"]   =   "All   Mailings   Complete";  
   
  //   initialize   a   datatable   for   users   online  
  DataTable   objUserTable   =   new   DataTable();  
  objUserTable.Columns.Add("SessionID",System.Type.GetType("System.Guid"));  
  objUserTable.Columns.Add("PeopleID",System.Type.GetType("System.Int32"));  
  objUserTable.Columns.Add("ShowDetail",System.Type.GetType("System.Boolean"));  
  DataColumn[]   pk   =   new   DataColumn[1];  
  pk[0]   =   objUserTable.Columns[0];  
  objUserTable.PrimaryKey   =   pk;  
  Application["UserTable"]   =   objUserTable;  
  }  
     
  ///   <summary>  
  ///   The   Session_Start   event   adds   user   session   information   to    
  ///   Application["UserTable"].  
  ///   </summary>  
  public   virtual   void   Session_Start(object   sender,   EventArgs   e)  
  {  
  Application.Lock();  
  //Application.Lock   ();  
  DataTable   objUserTable   =   (DataTable)Application["UserTable"];  
  DataRow   objRow   =   objUserTable.NewRow();  
  Guid   objGuid   =   Guid.NewGuid();  
  objRow[0]   =   objGuid;  
  Session["PfSessionID"]   =   objRow[0];  
  objRow[1]   =   0;  
  objRow[2]   =   false;  
  objUserTable.Rows.Add(objRow);  
  Application["UserTable"]   =   objUserTable;  
  Application.UnLock();  
  }  
   
     
  ///   <summary>  
  ///   The   Session_End   event   deletes   user   session   information   from    
  ///   Application["UserTable"].  
  ///   </summary>  
  public   virtual   void   Session_End(object   sender,   EventArgs   e)  
  {  
  Application.Lock();  
  DataTable   objUserTable   =   (DataTable)Application["UserTable"];  
  objUserTable.Rows.Find((Guid)Session["PfSessionID"]).Delete();  
  Application["UserTable"]   =   objUserTable;  
  Application.UnLock();  
  }Top

36 楼tjj36(忧郁的眼睛)回复于 2004-08-10 08:35:48 得分 0

学习ApplicationTop

37 楼yukingwq(古鲁)回复于 2004-08-10 08:35:54 得分 0

你可以去参考   lostinet的   聊天室的例子,  
  除非从客户端不断的发信息到服务器端  
  否则很难精确的得知用户是否在线  
   
  粗略的要求的话   session过期检查也是不错的选择Top

38 楼1979xt(搞.NET三年多,现在有点迷惘.)回复于 2004-08-10 08:52:24 得分 0

防止同一帐户重复登录系统不难,难得是用户非法退出后就不能正常登录了,只有等Session过期后才行。Top

39 楼codeangel(http://www.wSoft.Net)回复于 2004-08-10 09:08:25 得分 0

防止非正常退出:  
   
  1.用JS刷新;  
  2.作个恢复登陆功能;  
  Top

40 楼ShengNet(打败.net)回复于 2004-08-10 09:11:02 得分 0

学习....Top

41 楼xinshaw(清瘦卫郎)回复于 2004-08-10 09:17:54 得分 0

(1)在每个页面放一个iframe,每隔一到两分钟刷新,其实客户端不会感觉到在刷新。  
  (2)数据库中用SessionID,UserID来存储登录用户的信息。  
  (3)当用户关闭浏览器时,弹出一个小窗口(onunload事件),在此窗口的页面中进行注销操作,将数据库中相应的记录删除。这个小窗口你可以设置它在屏幕之外弹出,用户无法看到。  
  Top

42 楼vzxq(灵感人)回复于 2004-08-10 09:35:50 得分 0

我也觉的上边所说的不太成熟,不用及时的反应出用户的状态。  
  我现在做用户在线列表也碰到这样的问题。  
  来高手《帮你UP  
  楼上所说的有代码吗?Top

43 楼jedliu(21世纪什么最贵? 人才!)回复于 2004-08-10 09:45:14 得分 0

除非你要做想CSDN之类的大论坛,否则你用Application,Session都行,他们的效率差别不大。不过我建议用Session,它是面对单个会话的,而Application是面对整个程序的,相比之下Session更灵活!Top

44 楼yujia120(永不停息)回复于 2004-08-10 11:30:37 得分 0

楼上的有代码么?不用APPLICATION的Top

45 楼cnblackhawk(cnblackhawk)回复于 2004-10-28 13:37:50 得分 0

upTop

相关问题

  • 多个不同名称的帐户登录同一系统问题
  • 如何防止同一个用户在不同的电脑上登录,谢谢
  • 求代码片段: 如何防止同一个用户名在不同的IP上同时登录我的服务器?
  • 多台电脑使用同一个帐户登陆的问题
  • 我的网站要如何防止用户过于频繁的登录,如几秒内只能登录一次,一天只能登录15次,同一个IP限制等.证证码已经有了
  • 怎么防止同一程序同一时间运行两次?
  • "登录失败,该目标帐户名称不正确"
  • 急求windows帐户登录SQL SERVER源代码
  • 同一个登录出现的问题
  • CSDN的BLOG在同一台机器上,不能登陆两个帐户

关键词

  • 用户
  • 数据库
  • 系统
  • 字段
  • application
  • 代码
  • 页面
  • 服务器
  • objusertable
  • 登录

得分解答快速导航

  • 帖主:bjy3199
  • yukingwq

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo