【问题标题】:How to log out a specific user session (php and mysql)如何注销特定用户会话(php 和 mysql)
【发布时间】:2014-05-12 19:44:45
【问题描述】:

这是我的问题。

我正在开发食品管理系统。

现在我知道,当有人登录时,它会将他们的信息放入登录表中。

然后,使用该信息,当用户注销时,它会将他们从表中删除。

当多人登录时,我遇到了麻烦。

检查这个场景。

有人登录。他们被带到他们的仪表板,并且能够根据食物表在一个列表中查看他们的食物,该列表有食物行,电子邮件列指定谁拥有该特定项目。

现在如果他们注销,它会将他们从登录表中删除。

但是,如果第一个用户仍然登录,然后第二个用户登录。那就是问题开始出现的时候。

如果第二个用户在第一个用户之前先退出,他的数据将被删除。但是如果第一个用户在第二个用户之前注销,第二个用户的数据仍然会从表中删除。如果第二个用户刷新,他会看到第一个用户的信息。

我认为这与会话有关,当用户登录时,它会转到仪表板并启动会话。不过,我设置它的方式是,当会话开始时,它会从登录表中提取最新用户的电子邮件。所以这就是问题所在。当 2 ppl 登录时,user email 变量现在引用最近的用户,所以当第一个用户注销时,最近的用户将被注销。

有没有办法创建唯一的会话,或者在有人登录时存储用户电子邮件/用户名,以便我可以在他们注销时参考该特定用户的电子邮件。

这是启动会话并查找最新用户的代码。

<?php require_once('Connections/localhost.php');

$index = 0;
?>

<?php
//initialize the session
if (!isset($_SESSION)) {

    mysql_select_db($database_localhost, $localhost);
    $log = mysql_query("SELECT email FROM loggedin") or die(mysql_error());
     while($cols = mysql_fetch_array($log)){
      $value = $cols['email'];
      $email[$index] = $value;
      $index++;
     } 

session_start();

然后我在查询中引用该 $value 变量。

因此,每次有人登录时都会运行此代码,然后将 $value 设置为最近的电子邮件,或者更确切地说,设置为查询电子邮件数组末尾的电子邮件。因此,当用户 1 注销时,它会在查询中使用 $value,但 $value 现在设置为下一个用户的电子邮件。我需要它,以便它保留为登录的用户电子邮件。

【问题讨论】:

  • 除非您在做一些奇怪的事情,否则会话应该对用户来说是唯一的。与其尝试从头开始编写此代码,您可能希望找到一个您喜欢的框架来提供执行此类事情的代码。
  • 这个问题对于 Stack Overflow 来说似乎太宽泛了,这是针对可以有明确答案的编码的具体问题。讨论高级设计概念和最佳实践更适合programmers.stackexchange.com。请阅读this meta post 了解更多信息。如果您有特定的编码问题,则需要提供更多信息。请阅读此advice on how to ask good questions
  • 我在代码中添加了一些更具体的内容。
  • 我有一个身份证。当会话开始时,我可以将带有会话 ID 的用户电子邮件添加到登录表中,然后当我希望他们注销时,我只需从登录中删除与会话 ID 对应的电子邮件。

标签: php mysql sql session logging


【解决方案1】:

通常您会使用会话变量来记住当前登录用户 ID 的 ID。 EG

$_SESSION['userId']=$validatedUserId;

$validatedUserId 当且仅当它通过密码检查时才具有 id,否则它应该为 null;

然后返回的帖子可以引用布尔值

(null!=$_SESSION['userId'])

您可以在此分支代码,如果不为空,则用户已登录。 当用户注销时,发出:

$_SESSION['userId']=null; session_destroy(); 

之后用户需要再次登录才能使用 $_SESSION['userId']。

【讨论】:

  • 谢谢伙计。同样在之前,当我在测试时,我在同一个浏览器实例上登录了两个帐户,这会导致记住会话 ID 的问题吗?
  • $_SESSION 数组包含例如 userId 将在特定浏览器的选项卡和窗口之间共享,但 IE、chrome、firefox 中的每一个都将具有单独的 SESSION id,因此数组可以有不同的价值观。就像在不同机器上的两个会话一样。
猜你喜欢
  • 2019-11-13
  • 2012-05-11
  • 1970-01-01
  • 2013-02-09
  • 2011-10-07
  • 2020-08-14
  • 2019-10-11
  • 2017-01-26
  • 2023-04-10
相关资源
最近更新 更多