登录脚本与PHP和mySQL -锁定页面,如果没有登录使用cookie


Login script with PHP and mySQL - lock pages if not logged in using cookies

我创建了一个登录脚本(在教程的帮助下)来保护我网站的维护部分。它可以工作,当成功登录时,就会生成cookie。问题是,使用的教程提供了一种方法来检查用户计算机上是否保存了(有效的)cookie,这些cookie仅适用于已注册的用户,但它没有任何结果(因此可能是错误)。我找不到哪里出了问题,希望你能帮我解决。顺便说一下,饼干可以保存半个小时。

<?php
// connect to db
include('connect.php');
// page of login script, used when no/wrong cookie is found
$login_pagina = "login.php";
$sql = "SELECT * FROM members WHERE username='".$_COOKIE['username']."'";
$resultaat = mysql_query($sql) OR die ("Couldn't connect to MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// cookie and databasevalues are not the same
echo "Click <a href='"".$login_pagina."'">here</a> to login.";
} else {
$login = mysql_fetch_object($resultaat);
if ($_COOKIE['password'] != $login->password) || ($_COOKIE['username'] != $login->username)) {
echo "Cookies couldn't be combined";
} else {
echo "you're logged in!";
}
}
?>

(由于教程是荷兰语的,我翻译了评论和一些文本。有些变量仍然是荷兰语,但我认为这已经足够清楚了。

所以你得到一个空白页?完全没有输出?如果是,一定有错误,尝试启用error_display(检查您的php.ini文件)。

几件事:1. 查询正在检查cookie的值是否为"members"表中的用户名。所以要确保它包含成员。2.使用firebug或chrome来检查cookie是否真的存在,以及它的值是否为成员的用户名。5.而不是:

$login = mysql_fetch_object($resultaat);
if ($_COOKIE['password'] != $login->password) || ($_COOKIE['username'] != $login->username)) {

Try:(条件必须是"AND"而不是"OR"…如果没有,就没有逻辑)

$login = mysql_fetch_array($resultaat);
if ($_COOKIE['password'] != $login['password']) AND ($_COOKIE['username'] != $login['username']) {
  1. 替换:if ($aantal == '0') {($aantal == 0) {这不是一个错误,但仍然,这个函数返回一个数字,所以把它当作一个数字。