cookie php, не работающий

Я пытаюсь использовать cookie с аутентификацией.

Эта страница работает однажды ввод пользователя и передачи

   <?
    if ((!$_POST[username]) || (!$_POST[password])) {
        header("Location: show_login.html");
        exit;
    }
    $db_name = "testDB";
    $table_name = "auth_users";
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error());
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error());
    $sql = "SELECT * FROM $table_name WHERE username ='$_POST[username]' AND password = password('$_POST[password]')";
    $result = @mysql_query($sql, $connection) or die(mysql_error());
    $num = mysql_num_rows($result);
        if ($num != 0) {
            $cookie_name = "auth";
            $cookie_value = "ok";
            $cookie_expire = "0";
            $cookie_domain = "domain.com.au";
            setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0);
            $display_block = "
            <p><strong>Secret Menu:</strong></p>
            <ul>
                <li><a href=\"secretA.php\">secret page A</a>
                <li><a href=\"secretB.php\">secret page B</a>
            </ul>"; 
        } else {
            header("Location: show_login.html");
            exit;
        }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Secret Area</title>
    </head>

    <body>
    <? echo "$display_block"; ?>


    </body>
    </html>

При нажатии на или secretA.php или на secretB.php я перенаправляюсь для входа в систему снова, он должен работать. вот код. secretB.php

<?php

if ($_COOKIE[auth] == "ok") {
    $msg = "<p>Welcome to secret page B, authorised user! </P>";
} else {
    header( "Location: /show_login.html");
    exit;
}
?>
<HTML>
<HEAD>
<title>Secret Page B:</title>
</HEAD>
<BODY>

<? echo "$msg"; ?>

</BODY>
</HTML>
5
задан Your Common Sense 24 April 2010 в 08:25
поделиться

3 ответа

Это отличный пример плохого кода.
Спасибо за публикацию. Многие люди могут прочитать это и извлечь уроки из этого.

Позвольте мне объяснить.
PHP может помочь вам найти некоторые непонятные ошибки. Не все, а некоторые из них.
Например, если вы неправильно набрали имя переменной, PHP выдаст ошибку ... конечно, если вы позволите PHP сказать.
Чтобы сделать каждую ошибку видимой, уровень отчетов об ошибках должен быть максимальным. Для этого каждый скрипт должен содержать следующую строку:

error_reporting(E_ALL);

после добавления, если он был правильно написан кода, вы увидите только одно сообщение об ошибке, указывающее на неверно введенную переменную. Но.
Вместо этого вы увидите водопад ошибок. Потому что PHP не может отличить преднамеренные ошибки от случайных.

Таким образом. В коде не должно быть преднамеренных ошибок, чтобы вы могли видеть случайные.
Это великий урок, который стоит запомнить.

Что это за ошибки?

  1. Строки в php разделяются кавычками.
    Итак, если у вас есть строка имя пользователя , оно должно быть записано как «имя пользователя» .
    И $ _POST [имя пользователя] становится $ _POST ["имя пользователя"].
    (и наоборот, переменные не нуждаются в кавычках, поэтому echo "$ msg"; должно быть echo $ msg; )
  2. все переменные должны быть установлены или проверены на наличие. Итак,
    if ((! $ _ POST [имя пользователя]) || (! $ _ POST [пароль])) {
    должен стать
    if (! empty ($ _ POST ["имя пользователя"]) ИЛИ! empty ($ _ POST ["пароль"])) {

С таким кодом вы будете видеть только случайную ошибку и сможете немедленно ее исправить.

1
ответ дан 14 December 2019 в 19:06
поделиться

Иногда это самое простое решение. То же самое случилось со мной. Я работал на локальном хосте (wampserver). Я обнаружил, что мой брандмауэр блокирует все запросы файлов cookie с localhost. В то время я использовал ZoneAlarm, но предполагаю, что другие брандмауэры могут иметь такой же эффект.Попробуйте отключить брандмауэр, чтобы проверить, не работает ли он по-прежнему.

1
ответ дан 14 December 2019 в 19:06
поделиться
try this :
   <?php
    if (isset($_POST['username']) and isset($_POST['password'])) 
    {

    $db_name = "testDB";
    $table_name = "auth_users";
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error());
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error());
    $sql = "SELECT * FROM $table_name WHERE username ='".$_POST['username']."' AND password = password('".$_POST['password']."')";
    $result = @mysql_query($sql, $connection) or die(mysql_error());
    $num = mysql_num_rows($result);
        if ($num != 0) {
            $cookie_name = "auth";
            $cookie_value = "ok";
            $cookie_expire = "0";
            $cookie_domain = "domain.com.au";
            setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0);
            $display_block = "
            <p><strong>Secret Menu:</strong></p>
            <ul>
                <li><a href=\"secretA.php\">secret page A</a>
                <li><a href=\"secretB.php\">secret page B</a>
            </ul>"; 
        } else {
            header("Location: show_login.html");
            exit;
        };


    }
    else
    {
    header("Location: show_login.html");
    exit;
    };
1
ответ дан 14 December 2019 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: