这是我的问题。
我正在开发食品管理系统。
现在我知道,当有人登录时,会将他们的信息放入登录表中。
然后,使用该信息,当用户注销时,会将其从表中删除。
当多人登录时,我遇到了麻烦。
检查这个场景。
有人登录。他们被带到他们的仪表板,并且能够根据食物表在列表中看到他们的食物,该列表包含多行食物,以及指定谁拥有该特定项目的电子邮件列。
现在,如果他们注销,则会将他们从登录表中删除。
但是,如果第一个用户仍然登录,然后第二个用户登录。那就会出现问题。
如果第二个用户先于第一个用户注销,则他的数据将被删除。但如果第一个用户在第二个用户之前注销,第二个用户的数据仍将从表中删除。如果第二个用户刷新,他将看到第一个用户的信息。
我认为这与 session 有关,当用户登录时,它会转到仪表板并启动 session 。我的设置方式是,当 session 开始时,它会从登录表中提取最新用户的电子邮件。这就是问题所在。当 2 人登录时,用户电子邮件变量现在引用最近的用户,因此当第一个用户注销时,最近的用户将被注销。
有没有办法创建唯一的 session ,或者在有人登录时存储用户电子邮件/用户名,以便我可以在特定用户注销时引用该特定用户的电子邮件。
这是启动 session 并查找最近用户的代码。
<?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 现在设置为下一个用户的电子邮件。我需要它,以便它保留为登录的用户电子邮件。
最佳答案
通常您会使用 session 变量来记住当前登录用户的 ID。 EG
$_SESSION['userId']=$validatedUserId;
$validatedUserId 当且仅当通过密码检查时才具有 id,否则应为 null;
然后返回的帖子可以引用 bool 值
(null!=$_SESSION['userId'])
您可以在此分支代码,如果不为空,则用户已登录。 当用户注销时,发出:
$_SESSION['userId']=null; session_destroy();
此后,用户需要再次登录才能使用 $_SESSION['userId']。
关于php - 如何注销特定用户 session (php 和 mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795976/