php - 如何从 MYSQL 定义当前用户 ID?

标签 php mysql

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

例如:如果采用下面的数据库结构并且 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 以及如何获得该 id他/她登录。

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

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

成功登录后,您将启动 session 并将与该登录用户相关的数据库内容行分配给新 session ,并且将从该 session 开始使用 session_start( )因为我这里有。

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

一旦你获得了你的 session ,你可以使用类似这样的东西来识别用户的名称和ID,这将在你有session_start()的每个页面上可用:

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

当用户想要注销或者您想要删除与该用户事件相关的 session 详细信息时,您可以使用:

unset($_SESSION['user']);

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

header("Location: index.php");

关于php - 如何从 MYSQL 定义当前用户 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36515279/

相关文章:

php - curl 无法将数据发布到 php 页面

PHP __toArray() 或 __toObject() 覆盖?

php - 如果运输方式是 Woocommerce 中的本地取货,则需要填写订单备注

mysql - 如何使用VueJS将数据从modal传递到MYSQL

mysql - 如何在 MySql 中的两列上执行 bool 逻辑,其中一列是 Varchar?

MySql Left Join 记录 where is null with handling validUntil Row

javascript - 在 while 循环中从 php 变量保存脚本变量

PHP 脚本未显示您已登录

mysql - MySQL 中的极低优先级 SELECT 查询

php - 如何使用 nl2br 从另一个表中回显连接名称的结果