【问题标题】:tracking multiple users in CMS with $_SESSION使用 $_SESSION 在 CMS 中跟踪多个用户
【发布时间】:2013-04-16 12:35:20
【问题描述】:

您好,我正在尝试在我制作的 CMS 中创建多个用户。我将他们的所有数据都放在一个表中,并使用mysql_num_rows 检查记录是否匹配,然后使用session_register() 设置会话。我已将其更改为 PDO 命令。

我希望能够在用户使用 CMS 时对其进行跟踪,以便每条更改的记录都可以附加其 usrID。这样以后我就可以看到谁进行了更新,并最终使用它来显示有关作者等的信息。

因此,例如,当他们使用表单更新或添加新记录时,隐藏的输入会回显他们的会话 ID,这将在他们登录时从他们的用户记录中获取。

这是最好的方法吗?是否正确地编写了此登录代码中的语法?

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sql="SELECT * FROM $tbl_name WHERE the_username='$the_username' and the_password='$the_password'";

$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn();

if($number_of_rows==1){
    $info = $result->fetch(PDO::FETCH_ASSOC);
    $_SESSION['username'] = $info['the_username'];
    $_SESSION['id'] = $info['id'];
    header('Location: admin.php');
}else{
echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
}

这样写会更好吗?

if($number_of_rows==1 && $info = $result->fetch(PDO::FETCH_ASSOC)){MAKE SESSION}

【问题讨论】:

    标签: php pdo multiple-users


    【解决方案1】:

    您对 PDO 函数的使用非常不一致,并导致一些错误。

    首先,您不能两次获取相同的数据。而且,事实上,您根本不需要这样的双重获取。

    另外,由于某种原因,您没有使用准备好的语句,这是使用 PDO 的唯一原因。所以,正确的代码应该是

    $sql="SELECT * FROM $tbl_name WHERE the_username=? and the_password=?";
    $result = $con->prepare($sql); 
    $result->execute(array($the_username,$the_password)); 
    # $number_of_rows = $result->fetchColumn(); <- don't need that
    $info = $result->fetch();
    if($info){
        $_SESSION['username'] = $info['the_username'];
        $_SESSION['id'] = $info['id'];
        header('Location: admin.php');
    }else{
        echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
    }
    

    【讨论】:

    • 太好了,这太棒了,谢谢你我会试试这个。我现在可以看到哪里出了问题。
    • 回显检查后显示它仍未设置 $_SESSION。我不知道为什么不,但我认为这是一个服务器问题,因为我在所有浏览器上的旧 mysql*_ 代码也是如此。一切都在所有字符等之前发送。
    【解决方案2】:

    是的,代码和逻辑运行良好。但是不要使用 session_register() 它们在新版本的 PHP 中已被弃用。

    【讨论】:

    • 你好,所以我尝试像这样登录,但它不起作用,没有错误,它确实进入了 else 子句。连接信息都是正确的。有什么想法吗?
    • 等一下,我想我知道它是什么
    • 是的,我在标题中还有 if(!session_is_registered(name)) 类型的东西,我想这也必须更改为 PDO
    • 是的,请更改它们,因为不推荐使用这种方式,不练习它们是不受欢迎的。
    • session_is_registered here的一些替代方案stackoverflow.com/questions/5286446/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多