Скрипт входа с PHP и mySQL - блокировка страниц, если вы не авторизованы с помощью куки - PullRequest
0 голосов
/ 18 ноября 2011

Я создал сценарий входа в систему (с большой помощью учебника), который защищает части обслуживания моего веб-сайта. Это работает, и при успешном входе в систему создаются файлы 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!";
}
}

?>

(Поскольку учебник был на голландском, я перевел комментарии и текст. Некоторые переменные все еще на голландском, но я думаю, что это достаточно ясно.)

1 Ответ

0 голосов
/ 17 января 2012

Так вы получаете пустую страницу? Нет выхода вообще? Если это так, то должна быть ошибка, попробуйте включить error_display (проверьте файл php.ini).

Несколько вещей: 1. Запрос проверяет, является ли значение cookie именем пользователя в таблице «members». Поэтому убедитесь, что он содержит членов. 2. Используйте firebug или chrome, чтобы проверить, существует ли cookie на самом деле и является ли его значение именем пользователя. 5.Instead:

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

Попробуйте: (Условие должно быть "И", а не "ИЛИ" ... логики нет, если нет)

$login = mysql_fetch_array($resultaat);
if ($_COOKIE['password'] != $login['password']) AND ($_COOKIE['username'] != $login['username']) {
  1. заменить: if ($ aantal == '0') { ($ aantal == 0) { Это не ошибка, но, тем не менее, эта функция возвращает число, поэтому рассматривайте его как число.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...