仅在登录时显示内容

时间:2010-12-01 17:10:19

标签: php html

你好,我有一个问题。我已经设置了我的登录系统与cookie,它的工作原理。但是我想知道是否有更干净的版本。

<?
include('../config/db_config.php');

$username = $_COOKIE['user'];
$password = $_COOKIE['pass'];

$result = mysql_query("SELECT * FROM users WHERE isadmin = 1");

while($row = mysql_fetch_array($result))
{
    if($username == $row['username'] && $password == $row['password'])
    {
        //User entered correct username and password
        echo("ALLOW");
    }
    else
    {
        //User entered incorrect username and password
        echo("DENY");
    }
}
?>

如果我以管理员身份登录,您会看到我希望仅显示我的所有内容。那么,现在唯一的做法就是ECHO出我的HTML / PHP / Javascript而不是回显ALLOW,因为如果我只是包含(“somepage.php”),那么该页面仍然可以在不登录的情况下使用,即使我在那里做同样的检查,我仍然会回避所有事情。

4 个答案:

答案 0 :(得分:4)

  • 为什么要加载每个用户,然后比较用户名和密码?加载匹配用户名和密码的单个用户会不会更容易?

  • 加载单个用户将允许删除while()

  • 在PHP中,使用mysql_query; 使用PDO(如果需要,请谷歌知道它为什么更好)。

  • 检查您的输入(这里非常可选,我同意)。

  • 绝不以纯文本格式存储密码。

你可以做类似的事情(我多年没有使用过PHP / PDO,所以代码可能不准确):

if (strlen($username)> 128)
{
    // Something wrong. The username is too long.
}

$hash = sha1($password);
$sth = $dbh->prepare('if exists(select * from users where isadmin = 1 and username = :username and password = :password) select 1 else select 0');
$sth->bindParam(':username', $username, PDO::PARAM_STR, 128);
$sth->bindParam(':password', $hash, PDO::PARAM_STR, 40);
$sth->execute();
$isFound = $sth->fetchAll();
if ($isFound)
{
    // User entered correct username and password.
    echo 'ALLOW';
}

答案 1 :(得分:3)

您可以在登录页面(或任何检查登录的页面)上设置一个会话变量,该变量存储它们是否已登录并且它将在页面中保持不变。然后你可以简单地将你的admin html包装在if语句中,如下所示:

<?php
if ($_SESSION['isAdmin'] == true) {
?>
<p>My admin html</p>
<?php
} else {
?>
<p>My non-admin html</p>
<?php
}
?>

要在会话中保存信息,只需将其添加到您拥有echo("ALLOW");的部分:
    $ _SESSION ['isAdmin'] = true;

您还需要将session_start();添加到脚本的顶部。

答案 2 :(得分:0)

我建议你只做一次这样的事情,当用户第一次访问页面,然后在剩下的时间里设置$ _SESSION ['is_admin']或其他东西,这样你就没有每个页面进行额外的数据库调用。

答案 3 :(得分:0)

您可以随时将“somepage.php”放在文档根目录下。这是阻止直接执行的常用方法。

例如,如果您的网络服务器看起来像'project / public_html / index.php',请将您的admin-only包含在'project / somepage.php'中,然后使用include(“../ somepage.php”)等引用它)。

显然,这需要根据您使用的实际路径进行调整。