如何防止同一帐户重复登录系统?
我用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




