使用$ _SESSION跟踪CMS中的多个用户

时间:2013-04-23 10:23:40

标签: php pdo multiple-users

您好我正在尝试在我制作的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}

2 个答案:

答案 0 :(得分: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>";
}

答案 1 :(得分:0)

是的,代码和逻辑工作正常。但是不要使用session_register(),它们在新版本的PHP中已被弃用。