php - 如何注销特定用户 session (php 和 mysql)

标签 php mysql sql session logging

这是我的问题。

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

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

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

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

检查这个场景。

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

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

但是,如果第一个用户仍然登录,然后第二个用户登录。那就会出现问题。

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

我认为这与 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/

相关文章:

mysql - 清除 MySQL 磁盘空间

mysql - 在不依赖任何 ID 的情况下选择 MySQL 中的每隔一行?

mysql - SQL 选择查询帮助。连续四行的最大总和。

php - Mysql 更新查询以更改或保留上传的图像

php - "within 7 days"间隔的结果不显示今天的结果。

php - 自定义 Google + 分享文本(片段)

mysql - 检查具有相同 FK 的行中的值

mysql - 订购 Group BY

sql - 相交删除

php - 如何使用blowfish进行加密在python和php之间发送加密消息?