PHP China | 中国开源之路 's Archiver

linvo 发表于 2008-11-19 17:29

怎样防止同一帐号重复登录?

怎样防止:
同一用户,开两个浏览器窗口,登录同一帐号,进行同时操作?

已解决:感谢devotedsk提出解决方法
[url=http://www.phpchina.com/bbs/viewthread.php?tid=92001&page=4&fromuid=34746#pid735969]http://www.phpchina.com/bbs/viewthread.php?tid=92001&page=4&fromuid=34746#pid735969[/url]
同时也感谢大家踊跃的讨论~

[[i] 本帖最后由 linvo 于 2008-11-20 21:46 编辑 [/i]]

异度冰晶 发表于 2008-11-19 17:35

Impossible
除非你能区别开 “同时打开两个窗口登陆” 和 “关闭上一个窗口再打开新窗口登陆”

sai翔 发表于 2008-11-19 17:35

记录在数据库里,可以不?

liexusong 发表于 2008-11-19 17:40

回复 3# sai翔 的帖子

正解!

php^_^ 发表于 2008-11-19 17:40

session,

linvo 发表于 2008-11-19 17:52

回复2#:我也感觉区别不同窗口太难了
回复3#4#:能大致说下原理吗?
回复5#:session可以吗??

我现在的情况是:
前提条件是,用户进行任何操作前都要先判断该帐号是否在线。这样的话:
1、用户第一次登录后,在数据库中记录他在线(标识其在线);
2、用户重新打开新窗口用同一帐号登录,程序判断该帐号是否已在线:
a) 若不在线则正常登录(标识其在线)
b) 若在线则标识其离线,并让重新登录。
可现在问题是:
此时他在第二个窗口重新登录后,数据库中状态又变成在线,这样第一个窗口又可以正常操作了!

akas628 发表于 2008-11-19 17:59

期待高手回答,帮顶!
是两个浏览器还是两个浏览器标签页面?
ps:cs的常见,bs的这样做不清楚

[[i] 本帖最后由 akas628 于 2008-11-19 18:02 编辑 [/i]]

某个人 发表于 2008-11-19 18:01

其实我没明白LZ的意思。。。。

syb328 发表于 2008-11-19 18:05

[quote]原帖由 [i]linvo[/i] 于 2008-11-19 17:52 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=733216&ptid=92001][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
回复2#:我也感觉区别不同窗口太难了
回复3#4#:能大致说下原理吗?
回复5#:session可以吗??

我现在的情况是:
前提条件是,用户进行任何操作前都要先判断该帐号是否在线。这样的话:
1、用户第一次登录后 ... [/quote]
晕了,不论开几个窗口,总要登录吧?登录总要查数据库吧?你在数据库里设置一个flag,用户第一次登陆,设置为true,用户登出或长时间没有操作(怎么定义,怎么使用数据库)后,就把它设置为false,当用户再次登陆时,检查对应的flag,true则不允许登录,否则登录不就行了,还有
“同时打开两个窗口登陆” 和 “关闭上一个窗口再打开新窗口登陆”是可以区分的,用js,当关闭一个窗口会引发一个时间,在那个事件处理中把用AJAX或其他把flag设置为false不就行了
"此时他在第二个窗口重新登录后,数据库中状态又变成在线,这样第一个窗口又可以正常操作了!"你在页面中设置"header('Expires: '.date('D,d M Y H:i:s',mktime(0,0,0,1,1,2000)).' GMT');
header('Last-Modified:'.gmdate('D,d M Y H:i:s').' GMT');
header('Cache-control: private, no-cache,must-revalidate');
header('Pragma: no-cache');"之类的代码就行了,这样的情况就和以前用户登出后,按“后退”还能退到管理界面一样

今心 发表于 2008-11-19 18:11

[quote]原帖由 [i]某个人[/i] 于 2008-11-19 18:01 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=733254&ptid=92001][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
其实我没明白LZ的意思。。。。 [/quote]

linvo 发表于 2008-11-19 18:16

回复 9# syb328 的帖子

禁止登录的方法有这样的问题:
用户如果临时关闭浏览器后,又想重新进去,岂不登录不了了?一直要等到规定的离线时间间隔才可以登录。

关于你提出的最后一点:
如果这样呢:第一个窗口一直停留在登录后界面,不进行其他操作。等第二个窗口成功登录后,他才继续操作。

linvo 发表于 2008-11-19 18:19

[quote]原帖由 [i]某个人[/i] 于 2008-11-19 18:01 发表 [url=http://www.phpchina.com/bbs/redirect.php?goto=findpost&pid=733254&ptid=92001][img]http://www.phpchina.com/bbs/images/common/back.gif[/img][/url]
其实我没明白LZ的意思。。。。 [/quote]
其实就是为了实现:禁止同一帐号双开!

akas628 发表于 2008-11-19 18:20

网页游戏吗?

syb328 发表于 2008-11-19 18:20

回复 11# linvo 的帖子

第一个问题:没办法,关闭浏览器视为退出。不要什么都考虑到,用户体验的前提是浏览器稳定,
第二个问题:你可以使用sessionid,教程网上找找吧,

linvo 发表于 2008-11-19 19:19

回复 14# syb328 的帖子

sessionid。。。。恩~这个貌似还有点可行性,可以试试
谢谢啦

yafeikf 发表于 2008-11-19 19:47

放到数据库里。。Ok,搞定。。。


登录后数据库某一个字段的值为1,退出登录后,设为0,用户登录后10分钟内无操作,自动退出。

linvo 发表于 2008-11-19 20:03

回复 16# yafeikf 的帖子

谢谢,这个我知道。问题的重点不在这里~

linvo 发表于 2008-11-19 20:07

回复 14# syb328 的帖子

考虑了一下,好像用session_id()也不可行~

yafeikf 发表于 2008-11-19 20:11

回复 17# linvo 的帖子

那在哪里捏?

syb328 发表于 2008-11-19 20:14

session_id即SID,只有当第一次打开浏览器有效,第二次打开,必须关闭所有浏览器后才有值(备案系统就是这样的),这样就能保证用户只能使用一个浏览器(包括一个标签页)

页: [1] 2 3

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.