如何从MYSQL定义当前用户ID


How to define the current users ID from MYSQL?

如果您的网站允许多个用户注册,那么他们很可能能够更新、删除或查看他们的信息。现在,如何定义当前用户的id,让他们只访问自己的信息/mysql行

例如:如果你采用下面的db结构,而bob是在线的,我如何告诉页面bob是当前用户,他的id="1",并且它对每个在线的用户都这样做。

数据库结构示例:

ID |  name | Email 
 1 |  bob  | bob@example.com
 2 |  john | john@example.com

请注意,这些是折旧函数这是我的登录脚本,它只是在一个重定向循环中发送给我。这是用折旧后的函数编写的,我如何更新它以使用PDO?

<?php
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['user_id'])!="")
{
    header("Location:login.php");
}
if(isset($_POST['btn-login']))
{
    $email = mysql_real_escape_string($_POST['email']);
    $upass = mysql_real_escape_string($_POST['upass']);
    $email = trim($email);
    $upass = trim($upass);
    $res=mysql_query("SELECT user_id, user_name, user_pass FROM users WHERE user_email='$email'");
    $row=mysql_fetch_array($res);
    $count = mysql_num_rows($res); // if uname/pass correct it returns must be 1 row
    if($count == 1 && $row['user_pass']==md5($upass))
    {
        $_SESSION['user_id'] = $row['user_id'];
        header("Location:index.php");
    }
    else
    {
echo '<div class="invalid-message text-center">Email or password is  invalid</div>';   
    }
}
?>

你需要从不同的角度来处理这个问题——而不是简单地说有一个用户有一个id和一个名字,你需要备份几个步骤来思考该用户是如何获得该id以及他/她是如何登录的。

您需要创建一个登录页面,该页面将使用名称/密码,并根据数据库中存储的数据进行检查,如果正确,则允许用户继续使用该页面。如果不正确,你需要允许他们重新输入详细信息(例如,如果他们键入了错误的p/w),或者如果他们没有账户(因此没有id),则需要注册。

请注意,密码不得以纯文本形式存储在数据库中,并且应进行哈希处理(例如使用SHA 256加密)和加盐处理,并且您在登录时会检查p/W的哈希和加盐版本。

成功登录后,您将启动会话,并将与登录用户相关的内容的数据库行分配给新会话,正是从该会话开始,id和名称将从session_start()中使用,就像我在这里看到的那样。

总之,当他们登录时,假设登录是正确的,然后将详细信息分配给会话,并将session_start()包含到您希望包含在会话中的每个页面,然后您可以通过$userID或$userName引用用户。

一旦你获得了会话,你就可以使用这样的东西来识别用户的名称和id,这将在你拥有session_start()的每个页面上都可用:

if(!empty($_SESSION['user']) )
    {
        $userID=$_SESSION['user']['id'];
        $userName=$_SESSION['user']['name'];
    }....

当用户想要注销或您想要删除与该用户活动相关的会话详细信息时,您可以使用:

unset($_SESSION['user']);

然后你可以将它们重定向到另一个页面

header("Location: index.php");