Only one

智鹿软件 2010-07-07 06:43:52
业务:让同一个用户只能在一个IP登录。避免A用户在IP1登录,同时在IP2登录。

1.在数据库断操作:
A.数据库userinfo有一个字段online记录用户是否在线
B.用户登录,把状态改为在线,A用户在IP2登录的时候,数据库是在线,提示已经在线
C.存在问题:如果用户在点注销,我调用request.getSession().invalidate();此时我的监听器会监听器到session销毁,
	public void sessionDestroyed(HttpSessionEvent event) {
int uid = ((UserBean) event.getSession().getAttribute("user_online")).getUid();
UserServices userServices = new UserServices();
if (true == userServices.userLogout(uid)) {
System.out.println("用户在数据库的"是否在线"修改成功");
}
System.out.println(new Date().toLocaleString()+ "__销毁session:__"+ event.getSession().getId());
}
在数据库把当前用户改为离线。任务完成。
2.但是,如果用户是直接关闭浏览器,我的监听器就监听不到。虽然20分钟之后会清理内存,这个session销毁,此时改为离线。
但是如果登录10分钟,不小心关闭了浏览器,现在再登录,就等不上了,因为还不到20分钟,session未销毁。
...全文
361 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
智鹿软件 2011-05-12
  • 打赏
  • 举报
回复
sso
heardy 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qqcrazyboy 的回复:]
1.利用cookie解决方案:
A.如果用户没有勾"记住密码",则创建一个有效期为20分的cookie,如果用户在登录后10分钟关掉浏览器,这是通过20分钟cookie自动登录,不在需要密码登录。20分钟之后session销毁,20分钟cookie失效,如果没勾记住密码则要重新用密码登录!
B.如果用户勾了"记住密码",这不管是20分钟以内还是20以后,都用2天的cookie登录
[/Quote]

如果用户在登录后10分钟关掉浏览器,这是通过20分钟cookie自动登录,不在需要密码登录 但是原来的session在20分钟后就会把你数据库上的信息改为离线 那你现在是登录状态

别人看此登录的人哪不是显示有问题么?
智鹿软件 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 cl61917380 的回复:]

引用 17 楼 qqcrazyboy 的回复:
1.利用cookie解决方案:
A.如果用户没有勾"记住密码",则创建一个有效期为20分的cookie,如果用户在登录后10分钟关掉浏览器,这是通过20分钟cookie自动登录,不在需要密码登录。20分钟之后session销毁,20分钟cookie失效,如果没勾记住密码则要重新用密码登录!
B.如果用户勾了"记住密码",这不管是20分钟以内还……
[/Quote]
Application
coooliang 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qqcrazyboy 的回复:]
1.利用cookie解决方案:
A.如果用户没有勾"记住密码",则创建一个有效期为20分的cookie,如果用户在登录后10分钟关掉浏览器,这是通过20分钟cookie自动登录,不在需要密码登录。20分钟之后session销毁,20分钟cookie失效,如果没勾记住密码则要重新用密码登录!
B.如果用户勾了"记住密码",这不管是20分钟以内还是20以后,都用2天的cookie登录
[/Quote]

喂! 你这样怎么防止重复登啊!
智鹿软件 2010-07-15
  • 打赏
  • 举报
回复
为自己鼓掌!
智鹿软件 2010-07-15
  • 打赏
  • 举报
回复
2.cookie的时间是客户端的时间,所以在创建的cookie的时候最好把服务端的时间写入cookie!
智鹿软件 2010-07-15
  • 打赏
  • 举报
回复
1.利用cookie解决方案:
A.如果用户没有勾"记住密码",则创建一个有效期为20分的cookie,如果用户在登录后10分钟关掉浏览器,这是通过20分钟cookie自动登录,不在需要密码登录。20分钟之后session销毁,20分钟cookie失效,如果没勾记住密码则要重新用密码登录!
B.如果用户勾了"记住密码",这不管是20分钟以内还是20以后,都用2天的cookie登录
智鹿软件 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yangwenchaox 的回复:]
如果你的用户不多的话,可以把用户放在缓存里,轻松实现; 如果你用户很多的话,没必要做这个功能,不划算,你看现在哪个大网站做了这个功能... 是他们不会吗 ? ??
[/Quote]
很多!如果我盗了你的帐号,我们两个同时在线,你发个日志,我给你删掉,痛苦吧!
智鹿软件 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yktd26 的回复:]
Java code
<script language=javascript>
function window.onbeforeunload()
{
if (event.clientX>document.body.clientWidth && event.clie……
[/Quote]
如果这样的话,关闭一个浏览器,其他的浏览器也拿不到session的值了(比如<a></a>的时候打开一个新的窗体)!
YangWenChaoX 2010-07-08
  • 打赏
  • 举报
回复
如果你的用户不多的话,可以把用户放在缓存里,轻松实现; 如果你用户很多的话,没必要做这个功能,不划算,你看现在哪个大网站做了这个功能... 是他们不会吗 ? ??
YangWenChaoX 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qqcrazyboy 的回复:]

引用 13 楼 yangwenchaox 的回复:
如果你的用户不多的话,可以把用户放在缓存里,轻松实现; 如果你用户很多的话,没必要做这个功能,不划算,你看现在哪个大网站做了这个功能... 是他们不会吗 ? ??

很多!如果我盗了你的帐号,我们两个同时在线,你发个日志,我给你删掉,痛苦吧!
[/Quote]
你盗了我的号,你要删我日志,你完全可以等我下线了删...
yktd26 2010-07-07
  • 打赏
  • 举报
回复
<script       language=javascript>   
function window.onbeforeunload()
{
if (event.clientX>document.body.clientWidth && event.clientY<0||event.altKey)

{
发送销毁session请求
}

}
</script>

能不能在关闭页面时发送销毁session请求
yktd26 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 accpgyq123 的回复:]
那在同一个地方,动态IP的 还不让登陆了?
[/Quote]
在同一个地方,动态ip,关个浏览器,ip就换了?
Jason-Gao 2010-07-07
  • 打赏
  • 举报
回复
那在同一个地方,动态IP的 还不让登陆了?
dracularking 2010-07-07
  • 打赏
  • 举报
回复
避免同ip登录,是在登录时还是离线时

1.登录状态中再登录 不管是否同ip,都不应重复登录吧,或者只允许同ip重复登录?
2.离线状态中再登录 ip同允许登录 不同不允许登录 那要记录上次登录ip了?
Silence_Smile 2010-07-07
  • 打赏
  • 举报
回复
楼上两位头像蛮配的么!
[Quote=引用 5 楼 cooljia 的回复:]

用户如果不小心关闭了浏览器,再次登陆的话,IP地址应该是同数据库里面是一样的,你可以在逻辑上允许这样的操作。
[/Quote]
这个我觉得可以实现,记录下用户是否在线,同时维护一个字段:上次登录IP
如果这次登录的IP与上次登录的IP一样,那么即使是在线也允许用户登录!
liaoyukun111 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vip__888 的回复:]
asp.net 实现 禁止同一用户同事登陆
使用cache保存
[/Quote]

看了 觉得还行
Jason-Gao 2010-07-07
  • 打赏
  • 举报
回复
人家发的是java程序。。。。 帮顶下 我也想问这个问题
cooljia 2010-07-07
  • 打赏
  • 举报
回复
用户如果不小心关闭了浏览器,再次登陆的话,IP地址应该是同数据库里面是一样的,你可以在逻辑上允许这样的操作。
vip__888 2010-07-07
  • 打赏
  • 举报
回复
加载更多回复(3)

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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