Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php会话管理_Php_Session - Fatal编程技术网

php会话管理

php会话管理,php,session,Php,Session,我正在用php开发一个系统,它有不同类型的用户,比如admin、a、B、C 我需要一次只允许该类型的一个用户登录。方法 1) 如果已经有管理员用户登录,则其他管理员用户无法登录。 2) 并且登录的凭据不能同时在其他pc上使用(就像yahoo messenger登录系统一样) 当有人登录并注销时,我尝试在数据库表中存储具有登录注销时间的会话。 但是,如果有人在未注销的情况下关闭浏览器,则会产生问题,注销进入时间将错过。您可以始终将会话过期时间设置为极短(例如60秒),并在每个页面上使用Ajax回发

我正在用php开发一个系统,它有不同类型的用户,比如admin、a、B、C

我需要一次只允许该类型的一个用户登录。方法 1) 如果已经有管理员用户登录,则其他管理员用户无法登录。 2) 并且登录的凭据不能同时在其他pc上使用(就像yahoo messenger登录系统一样)

当有人登录并注销时,我尝试在数据库表中存储具有登录注销时间的会话。
但是,如果有人在未注销的情况下关闭浏览器,则会产生问题,注销进入时间将错过。

您可以始终将会话过期时间设置为极短(例如60秒),并在每个页面上使用Ajax回发,超时时间为25秒,以保持会话活动。这就是Facebook如何知道你是否为他们的Facebook IM“在线”

1)如果已经有管理员用户登录,则没有其他管理员用户可以登录。

如果要停止来自同一系统的多个登录
,请设置会话标志,如$\u session['loggedin']=true;当成功登录时,在每次尝试登录之前,请检查此标志,并且仅当该标志为False时,才能继续登录过程

如果要停止来自多个系统的多个登录
,请在数据库中创建一个临时表以保存登录用户的状态,并在任何登录尝试发生之前检查此表以查找任何登录用户,如果未找到任何用户,则只需继续,或者提示用户

2)和登录凭据不能同时在其他pc上使用(就像yahoo messenger登录系统一样)。


在数据库中创建一个临时表,该表将保存所有已登录用户的状态,然后当已登录的用户尝试从其他位置登录时,检查临时表中该用户ID的状态,如果发现他已登录,则提示他或拒绝他,或在他再次登录之前将他从其他计算机注销。

为什么希望每次最多只登录一个组?您是否试图通过这种方式避免种族危险?@Gumbo,什么是种族危险?您可能希望对此使用位值和比较,因此
if($user->role&ROLES::ADMIN)
@Starx:在这种情况下,多个用户尝试在同一系统上工作。例如,当它们都开始编辑文档的相同状态时,进行不同的更改并尝试存储这些更改。@Gumbo,这是一条有用的信息。感谢会话是用户特定的。变量不会出现在每个新用户身上。@DanMan,你指的是哪一点,如果是2,那么我建议使用db?如果是1,那么我假设不同的登录尝试发生在同一台计算机上,如果这也发生在不同的系统上,那么在这种情况下我们必须再次使用db。?我会更新我的答案,如果这是OP wantsI所说的1),是的,我假设登录尝试可以在多台计算机上进行。好的,我已经修改了我的答案。。。回答他的问题就足够了,还是我需要补充一些,请告诉我。谢谢你的回答。这将有助于我防止多次登录。谢谢你的建议安东尼。现在我正在使用1800秒的会话超时。我将尝试在访问某个页面时延长会话超时时间。再次感谢。