【问题标题】:php session managementphp会话管理
【发布时间】:2011-04-29 19:35:43
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么您希望每个组一次最多只有一个登录?您是否尝试以这种方式避免比赛危险?
  • @Gumbo,什么是种族危险?
  • 您可能想为此使用按位值和比较,所以if($user->role & ROLES::ADMIN)
  • @Starx:在这种情况下,多个用户尝试在同一个系统上工作的情况。例如,当他们都开始编辑文档的相同状态时,进行不同的更改并尝试存储这些更改。
  • @Gumbo,这是有用的信息,谢谢

标签: php session


【解决方案1】:

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

【讨论】:

  • 感谢安东尼的建议。现在我正在使用 1800 秒的会话超时。我将尝试在访问某些页面时延长会话超时期限。再次感谢。
【解决方案2】:

1) 如果已经有管理员用户登录,其他管理员用户不能登录。

If you want to stop multiple logins from same system 然后设置一个会话标志,如 $_SESSION['loggedin']=true;当成功登录时,在每次登录尝试之前,检查此标志,并且仅当标志错误时才继续登录过程。

If you want to stop multiple logins from multiple system 然后在您的数据库中创建一个临时表来保存您的登录用户的状态,并在任何登录尝试发生之前检查此表以查找任何登录用户,如果您没有找到任何用户,则只需继续,否则提示用户

2) 并且登录的凭据不能同时在其他电脑上使用(就像雅虎Messenger登录系统一样)。

在你的数据库中创建一个临时表,它会保存你所有登录用户的状态,然后当一个已经登录的用户尝试从另一个地方登录时,检查你的用户 ID 的状态临时表,如果发现他已登录,则提示他或拒绝他或将他从其他计算机注销,然后再重新登录。

【讨论】:

  • 会话是用户特定的。变量不会对每个新用户都有。
  • @DanMan,您指的是哪一点,如果是 2,那么我建议使用 db 来达到这个目的?如果是 1,那么我假设正在发生不同的登录尝试在同一台计算机上,如果这也发生在不同的系统上,那么在这种情况下我们必须再次使用 db。?如果这是 OP 想要的,我会更新我的答案
  • 我说的是 1),是的,我假设登录尝试可以从多台计算机上进行。
  • 好的,我已经修改了我的答案...是否足以回答他的问题,或者我需要补充一些,请告诉。
  • 感谢您的回答。防止多次登录对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2012-12-03
  • 2012-12-12
  • 2016-01-03
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多