b/s系统用户帐户的登入与退出的判断

simple870617 2009-03-13 08:11:54
我给别人一个帐户,别人登入到我们系统时,如何判断用户登入(我的想法是在数据库用户表里面加一个字段,如果登入了,就设为false,这样就不能有其他人使用这个帐号登入。退出时设为true,这时就可以登入)
但是用户退出时,我怎么判断用户退出了?因为退出时会有很多可能,比如说死机啊,从进程关掉啊等等..我如何知道用户非正常退出。
本人菜鸟,希望大家能帮帮忙。
...全文
1455 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
truecoffeefox 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 moosdau 的回复:]

用最新的登录会覆盖旧的登录。就是新登入的人往数据库写一个登录随机码,并且这个随机保存在登录信息中,这样,以前登录的人验证的时候,会发现和当前随机码不同,他就登录失效了。这样就可以保证只有一个人能登入。

用这种模式的比如QQ,第二个登录的人会使第一个人离线。

其实这样设置是合理的,因为一个帐户只应该由一个人保管密码。
[/Quote]

这个方法好
  • 打赏
  • 举报
回复
顶 75楼
ncqingchuan1976 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 greatchao88 的回复:]
登陆了就不让再登陆了
这种设计有什么好处呢?
[/Quote]

在超市商场收钱时需要这种要求。
kanshaoming 2009-03-16
  • 打赏
  • 举报
回复
1、在数据库中增加一个在线表,包含登陆人最后一次操作时间(登陆时间)
2、创建一个存储过程往这个在线表中插入数据,同时增加一个步骤,当最后一次操作时间大于当前时间30分钟,可以删除,
每次可判断此表
Crystalzhou 2009-03-16
  • 打赏
  • 举报
回复
mark
yxq281426250 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Moosdau 的回复:]
用最新的登录会覆盖旧的登录。就是新登入的人往数据库写一个登录随机码,并且这个随机保存在登录信息中,这样,以前登录的人验证的时候,会发现和当前随机码不同,他就登录失效了。这样就可以保证只有一个人能登入。

用这种模式的比如QQ,第二个登录的人会使第一个人离线。

其实这样设置是合理的,因为一个帐户只应该由一个人保管密码。
[/Quote]

这个方法貌似无论什么情况下,后登录的总能取代先登录的,先登录的能得到提示信息,并选择是否接受退出吗?
yxq281426250 2009-03-15
  • 打赏
  • 举报
回复
这个方法貌似无论什么情况下,后登录的总能取代先登录的,先登录的能得到提示信息,并选择是否接受退出吗?
alun0624 2009-03-15
  • 打赏
  • 举报
回复
up
dapp0000 2009-03-15
  • 打赏
  • 举报
回复
那就用profile,登陆的时候保存用户名,登陆日期,第几次登陆,注销日期,在线状态。
当用户正常登陆,更新登陆日期,第几次登陆,在线状态
当用户正常退出,更新注销日期,在线状态

当用户再登陆就判断旧注销日期>旧登陆日期。
符合(正常退出),更新登陆日期,第几次登陆,在线状态。
不符合(非正常退出,或者同一帐号两人同时登陆)。
再判断在线状态,真,提示您的帐号已经登陆,退出。
假(断电等情况),进入正常登陆页面。



-------初学ASP.NET,与大家交流。
walkghost 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liujiayu10 的回复:]
一般用AJAX定时向服务器发送数据,比如几点几分几秒,某某用户名,在线,服务器端更新用户最后发送时的数据,如果用户最后发送时间与现在比大于5分钟(自己可以随便设定)就可以表示为用户已经离线了
[/Quote]
这个应该是比较好的解决方案了。
但是如果并发量比较小的话,这样做可以;如果并发量像CSDN这么大的话,这么做会增加服务器的负担。除非你另做服务器放webservice。
如上面一位朋友所说,主要是找不到一个比较好的判断用户退出的的条件。
aemyang1987 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 che2piaopiao 的回复:]
目前为止最好的方法: Session

然后在Sesssion_end里写事件.


理由:如果用别的方法,客户端如果突然断电会怎么办?这样,一个用户的信息就不能正确的获取.


注明: 在Session_end里还是能取到超时的Session值的,所以,推荐楼主用这种方法喽
[/Quote]
这是最好的了
冰火小猫 2009-03-14
  • 打赏
  • 举报
回复
学习了!
windstore 2009-03-13
  • 打赏
  • 举报
回复
Mark...
IMAGSE 2009-03-13
  • 打赏
  • 举报
回复
UP一下~
liuyeede 2009-03-13
  • 打赏
  • 举报
回复
说一句实话,就是微软的MemberShip提供的方法也不能令人满意(他使用的是时间戳).
yangniao 2009-03-13
  • 打赏
  • 举报
回复
感觉楼主好像是在做一个游戏的用户登陆,如果一个用户登陆之后,就不能在登陆的话,假如不是真正的用户本人登陆,而用户本人要登陆的话,却登陆不了,那就出现问题了,感觉如果真的要这样也有点不合理,
如果真的要这样做的话,感觉就采用随机码,当用户第一次登陆的时候,给他一个随机码,存如数据库,并用一个session来进行判断间隔时间可以设置小一点,如果用户出现断电,死机的话,就在代码里边写一个判断如果用户正常离开网页,清空下session如果不是那就是非正常推出,等用户第二次登陆的时候,在判断用户名和密码正确的前提下,再给他一个随机码,这个时候你判断session如果不为空,并且和上次的随机码不一样,那就提示他用户在登陆,如果为空,就写如数据库,为登陆状态,
如果一个用户名只能登陆一个的话,那就可以模仿下QQ的登陆,如果一个登陆了,那么在登陆的就被T下线,
net_flyfox 2009-03-13
  • 打赏
  • 举报
回复
Application的原理是在服务器端建立一个状态变量,来存储所需的信息。要注意的是,首先,这个状态变量是建立在内存中的,其次是这个状态变量是可以被网站的所有页面访问的。这就意味着它只能存储一些要公布的信息,而不能存储一些比较个人的信息了!
我认为Application还不是很合适。
ihuuhz 2009-03-13
  • 打赏
  • 举报
回复
为什么没人提application,这个只要你登陆了加载进来就可以了啊,访问量大的虽然比较耗资源,但我估计楼主的访问量应该不是太大的商业网站把!
zyhappy1688 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 NqIceCoffee 的回复:]
简单的做法

表里应该有这样的两个字段:记录登入时间和是否在线

用户登入时

先检查是否在线,如果在线则验证其登入时间,如果登入时间超过某个特定的时间,那么认为是非正常模式推出,则认定此时用户不在线

执行正常的登入操作

PS:这个方案也有弊端,但应该可以接受
[/Quote]

方法的弊端在于人性化程度不高
NqIceCoffee 2009-03-13
  • 打赏
  • 举报
回复
简单的做法

表里应该有这样的两个字段:记录登入时间和是否在线

用户登入时

先检查是否在线,如果在线则验证其登入时间,如果登入时间超过某个特定的时间,那么认为是非正常模式推出,则认定此时用户不在线

执行正常的登入操作

PS:这个方案也有弊端,但应该可以接受
加载更多回复(55)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧