如何实现一个帐号只能一个人登录

问题描述

我想要实现只要这个帐号一登录,其他的人再使用这个帐号不论是在本机还是其他机子上的都不能再使用登录了,除非注销登录,其他人可以使用。我在网上找了很多,但是都说的不是很清楚,有的是通过记录session来判断的,有的是结合数据库实现的,但是都存在一个问题,如果要是机子断电,或者个alt+f4,或者是直接点浏览器的叉这样子的关闭,就清除不了session的值,或者是改变不了数据库中用户的登录状态,恳请高人指点,最好可以附上代码。

解决方案

解决方案二:
可以提供lz一个思路在应用程序启动时建立一个静态map存储用户id,当有用户登录时,查看map中是否存在该用户,如果存在就不许用户登录,如果不存在就允许用户登录。在html页面上使用ajax做一个心跳,每个一定时间向服务器提交一次,代表用户正在登录,如果过了一定的时间还是没有心跳认为用户已经下线,把用户id从map中删除,用户就可以再次登录。对于map的操作需要同步。
解决方案三:
友情帮顶,友情帮顶
解决方案四:
需要用定时刷新的方式,缺点就是会有一点延迟。可以借鉴一下QQ的方式,就是上线的时候把不是的人强制踢下线。
解决方案五:
可以用application去管理啊登录的时候,设置一个值,再次登陆的时候判断application里面是否有这个相对应的值
解决方案六:
1楼方案不错。
解决方案七:
引用3楼dahaidao的回复:

需要用定时刷新的方式,缺点就是会有一点延迟。可以借鉴一下QQ的方式,就是上线的时候把不是的人强制踢下线。

這個比較好些
解决方案八:
我也有个思路,创建一个session的同时,记录下ip和用户名作关联,服务器创建一个静态域,状态可以保持到用户正常退出。再有登录,首先验证这个空间里的用户,如果请求IP不同则不允许,反之则允许登录!可以有效防止alt+f4和断电的情况出现的拒绝登录问题。但是这个静态域又不等同于一楼说的那种长效的,具体点可以用一个独立运行的线程维护他的状态!设置一个退出前无操作状态下默认退出的时间,相当于一个队列,用户每次的请求相当于一个心跳(不用单独发送心跳),去更新这个等待时间,当两次请求间隔时间大于或等于这个时间值,假如用户名IP一致,则默认其在线状态。否则拒绝其操作,必须再次使用密码登录!当然要清除这个空间中的信息。简单说,超时时间内是在线的,重新登录的情况只有两种:用户正常退出和超出安全时间范围!
解决方案九:
浏览器关闭,会话关闭,session关闭。。。。
解决方案十:
怎么做一个ajax的心跳啊?什么意思呢?具体要怎么做?
解决方案十一:
登录时,数据库记录下当前登录的sessionId创建一个监听器,在session失效时解除数据库的登录状态(应对直接关闭浏览器的情况)如果要做到强制前一个用户下线可以采用过滤器,当后面用户登录时发现该用户已经登录,在内存中记录sessionId,再在过滤器里面判断如果和当前sessionId相同时,强制session失效。
解决方案十二:
保存用户名到session对象,同时在数据库中做标记,在别人注销或者session对象销毁的时候改变数据库里面的标记,每次登陆的时候可以通过数据库里面的标记进行判断
解决方案十三:
记录ip地址咯,,
解决方案十四:
publicclassOnlineUserimplementsHttpSessionListener{privatestaticHashMap<String,User>hUserName=newjava.util.HashMap<String,User>();//保存sessionID和username的映射/**以下是实现HttpSessionListener中的方法**/publicvoidsessionCreated(HttpSessionEventse){}publicvoidsessionDestroyed(HttpSessionEventse){hUserName.remove(se.getSession().getId());}/**isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法*@paramsUserNameString-登录的用户名称*@returnboolean-该用户是否已经登录过的标志*/publicstaticbooleanisAlreadyEnter(Uservo){booleanflag=false;if(hUserName.containsValue(vo)){flag=true;}else{//如果该用户没登录过,直接添加现在的sessionID和usernameflag=false;}returnflag;}/**isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法*@paramsUserNameString-登录的用户名称*@returnboolean-该用户是否已经登录过的标志*/publicstaticbooleanupdateAlreadyEnter(HttpSessionsession,Uservo){booleanflag=false;if(hUserName.containsValue(vo)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中)//遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username)Iteratoriter=hUserName.entrySet().iterator();while(iter.hasNext()){Map.Entryentry=(Map.Entry)iter.next();//Objectkey=entry.getKey();Objectval=entry.getValue();if(val.equals(vo)){iter.remove();}}hUserName.put(session.getId(),vo);//添加现在的sessionID和usernameflag=true;}else{//如果该用户没登录过,直接添加现在的sessionID和usernameflag=false;hUserName.put(session.getId(),vo);}returnflag;}/**isOnline-用于判断用户是否在线*@paramsessionHttpSession-登录的用户名称*@returnboolean-该用户是否在线的标志*/publicstaticbooleanisOnline(HttpSessionsession){booleanflag=true;if(hUserName.containsKey(session.getId())){flag=true;}else{flag=false;}returnflag;}}

当时想实现这个功能,没有成功,这儿只有我找到的代码,希望楼主实现后把代码帖出来共享给大家。
解决方案十五:
是这样的!受教了!~
解决方案:
引用3楼dahaidao的回复:

需要用定时刷新的方式,缺点就是会有一点延迟。可以借鉴一下QQ的方式,就是上线的时候把不是的人强制踢下线。

不错不错!!!
解决方案:
使用memcache来存放已经登陆的用户信息以用户名作为key值当登陆的时候用用户名去memcache中查找如果存在就提示帐号不能重复登陆。关于
解决方案:
哦是memcached
解决方案:
可以看下springsecurity的source,看看它是怎么实现会话管理的
解决方案:
好多种方式。。其实就是当某一个用户登陆时把他存到一个共享中。。当另一个人想登陆时,,就看这个其享中是否这个人还在,如果不在就登陆,如果还在则不让登陆。session--》当一个用户登陆时就创建一个session所以不能单单靠session来完成所以用一个静态的HashMap是很不错的想法。memcached缓存也是一个不错的想法。。。至于memcached的使用。一个不错的文章存到数据库也是一个办法。不过需要付负一定的资源。。所以成于不成还要看自己怎么想怎么办。。
解决方案:
ajax定时去判断状态
解决方案:
我记得淘宝也是用的重复登录把前一个踢下去的机制的,这个很容易实现。
解决方案:
mark,待后日学习!
解决方案:
积分在那里弄的/怎么我弄不到啊
解决方案:
学习一下
解决方案:
引用8楼johnstrive的回复:

浏览器关闭,会话关闭,session关闭。。。。

这里就行了!
解决方案:
引用1楼tgbmlp的回复:

可以提供lz一个思路在应用程序启动时建立一个静态map存储用户id,当有用户登录时,查看map中是否存在该用户,如果存在就不许用户登录,如果不存在就允许用户登录。在html页面上使用ajax做一个心跳,每个一定时间向服务器提交一次,代表用户正在登录,如果过了一定的时间还是没有心跳认为用户已经下线,把用户id从map中删除,用户就可以再次登录。对于map的操作需要同步。

不错的思路
解决方案:
在用户表中设置标志位(0:不在线,1:在线)登陆更改为1,退出时更改为0,登录时判断就可以了。
解决方案:
mark。。肯定用的着。。
解决方案:
也顶一下,期待高人!

时间: 2024-11-08 18:44:29

如何实现一个帐号只能一个人登录的相关文章

Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录_java

对于一个帐号在同一时间只能一个人登录,可以通过下面的方法实现: 1 .在用户登录时,把用户添加到一个ArrayList中 2 .再次登录时查看ArrayList中有没有该用户,如果ArrayList中已经存在该用户,则阻止其登录 3 .当用户退出时,需要从该ArrayList中删除该用户,这又分为三种情况 ① 使用注销按钮正常退出 ② 点击浏览器关闭按钮或者用Alt+F4退出,可以用JavaScript捕捉该页面关闭事件, 执行一段Java方法删除ArrayList中的用户 ③ 非正常退出,比如

有道云笔记怎么把其他帐号里的笔记导入到一个帐号里?

  (1)通过导入有道云笔记文件导入 ①导出其他有道云笔记账号的数据 您可以先登录您想要导出的账号,然后点击菜单-导出-有道云笔记文件来导入笔记.这样您会得到一个格式为ynote的文件,请您把它保存到您的电脑上. ②导入到目前想用的有道云笔记账号 您要先点击菜单-注销按钮,然后在登录页面,登录您想要导入的账号. 然后,您可以在有道云笔记中点击菜单-导入-有道云笔记文件来导入您刚才导出的ynote格式的笔记. (2)直接通过有道云笔记账号导入 目前,您也可以直接通过有道云笔记的账号来直接导入笔记.

给已故亲人一个帐号:1000Memories

Facebook开启了前所未有的社交新时代,在这个时代,人人通过网络联系起来,人们的现在和未来都和社交网络无时无刻发生着关系.而在美国,一个叫做1000Memories的网站,发现社交网站比较火,但都是赚现在和未来的钱,于是它把目标锁定过去:通过用记忆作为纽带,链接过去和现在,形成交流互动的社交网站,通过过去或者已经死去的人作为纽带提供价值,闷声赚钱.它曾获得300万美元的风投融资. 给故去亲人一个账号 正如网站创始人A dler在解释他最初的动机时说:"互联网上缺少足够的'过去时',这个网站提

JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)_java

JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)的实现思路如下所示: 一.该功能有什么作用 大家想想吧.反正总会有这样的需求的.这年头什么需求不会有..呵呵.有时候也不一定是需求,很有可能为了安全也会这么做.例如考试系统,在线聊天系统,很有必要做成这样的吧. 二.实现过程 a.问题分析 在系统中,我们一般都是把登录信息绑定到session中,看来从这入手是可能找到解决办法.说白了,也就是当用户登录时,判断一下这个用户有没有登录,如果登录了,就把以前的那个session清除

宽带上网-如何实现一个宽带帐号多用?

问题描述 如何实现一个宽带帐号多用? rt,不用无线,怎么让一个帐号同时让两台电脑上网,有什么办法没? 解决方案 taobao搜dlink di504,有线四口路由器,二手只要10块钱 解决方案二: windows内置internet连接共享,不要花钱,但是要两台电脑都开着,花电费.http://jingyan.baidu.com/article/db55b6094163394ba30a2f23.html 如果你的计算机只有一个网卡,那么你还得花5块钱买一片网卡,推荐realtek 8139或者

网易内测战网引发通行证抢注 一个通行证可绑定八个魔兽帐号

6月30日下午消息,据知情人士透露,网易今日下午邀请全体员工内部测试战网与<魔兽世界>(下称"魔兽"),在业内引起极大关注.不少业内人士通过网易员工帮忙抢注战网通行证,其中一个战网通行证可绑定八个魔兽帐号. 今日下午,有成功通过网易内部员工注册战网的人士告诉新浪科技,为防止公测后抢注不到自己的名字,于是通过熟人"先行一步". 战网给该人士反馈的注册确认邮件显示,战网通行证系统是一个集成式账号系统,只需使用该系统,便可以管理所有战网在中国大陆地区所支持的暴

串号-一个浏览器打开同一个网站,用两个帐号,如何如何使两个帐号不串

问题描述 一个浏览器打开同一个网站,用两个帐号,如何如何使两个帐号不串 做了个网站,用一个浏览器两个帐号同时登录页,结果最终串到一个帐号上,怎么写能让 两个帐号不串,如果不能,请告诉我这是什么原因.我登录大企业的网站也是这样的问题, 比如网易邮箱啊什么的,这是为什么呢? 解决方案 如果是放在session中的话,是会串的.现在浏览器,不同的tab页都是session共享的,不像以前ie6,ie7不同页面session不共享. 解决方案二: 能不能我不确定,但可以回答你另一半的问题.用同一个浏览器

虚惊一场:不要两个站使用一个淘链接帐号

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天使用phpwind在线应用里的淘链接,虚惊一场.我已经有个社区,做了淘链接,里面也有两笔收入,可是还没到提现的时候,钱拿不出来.这两天又做了一个社区,也想把淘链接搞上,于是安装完后,就非常熟练的到后台去设置淘链接. 点应用里面的"淘链接",右边出现了"注册新账号"和"使用老帐号"

五大趋势之国内互联网帐号开发

网页制作Webjx文章简介:帐号是一个你使用服务的必备品,帐号数量(用户数)也是比流量更能够衡量一个网站影响力的指标,所以帐号资源一直被大量网站看作命根子. 多年之前国外就支持Email作为网站帐号,从2005年出现OpenID,再到2008年.2009年Facebook Connect的大红大紫.他们的目的是解放 帐号是一个你使用服务的必备品,帐号数量(用户数)也是比流量更能够衡量一个网站影响力的指标,所以帐号资源一直被大量网站看作命根子. 多年之前国外就支持Email作为网站帐号,从2005