Создание куки в php - PullRequest
       36

Создание куки в php

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

Я пытаюсь узнать, как использовать куки из PHPNerds . У меня проблемы с запуском скриптов, которые они упомянули (я почти понимаю, что делает код, но я не могу понять, какой код будет храниться с каким именем). Они, как показано ниже,

Логин пользователя

<html>
<head>
<title>User Logon</title>
</head>
<body>
  <h2>User Login </h2>
  <form name="login" method="post" action="login.php">
   Username: <input type="text" name="username"><br>
   Password: <input type="password" name="password"><br>
   Remember Me: <input type="checkbox" name="rememberme" value="1"><br>
   <input type="submit" name="submit" value="Login!">
  </form>
</body>
</html>

Код входа

<?php
/* These are our valid username and passwords */
$user = 'jonny4';
$pass = 'delafoo';

if (isset($_POST['username']) && isset($_POST['password')) {

    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) {    

        if (isset($_POST['rememberme'])) {
            /* Set cookie to last 1 year */
            setcookie('username', $_POST['username'], time()+60*60*24*365, '/account', 'www.example.com');
            setcookie('password', md5($_POST['password']), time()+60*60*24*365, '/account', 'www.example.com');

        } else {
            /* Cookie expires when browser closes */
            setcookie('username', $_POST['username'], false, '/account', 'www.example.com');
            setcookie('password', md5($_POST['password']), false, '/account', 'www.example.com');
        }
        header('Location: index.php');

    } else {
        echo 'Username/Password Invalid';
    }

} else {
    echo 'You must supply a username and password.';
}
?>

Пользователи

<?php
/* These are our valid username and passwords */
$user = 'jonny4';
$pass = 'delafoo';

if (isset($_COOKIE[['username']) && isset($_COOKIE['password')) {

    if (($_POST['username'] != $user) || ($_POST['password'] != md5($pass))) {    
        header('Location: login.html');
    } else {
        echo 'Welcome back ' . $_COOKIE['username'];
    }

} else {
    header('Location: login.html');
}
?>

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Хорошо, теперь я понял,

PHP гибкий. Вы можете либо отделить ваш HTML от вашей логики или обслуживать все это на одной странице. Вы получите аргументы о том, каков «правильный» способ справиться с этим, но в конечном итоге это связано с вашими собственными предпочтениями и с тем, как вы планируете обрабатывать код в будущем.

Лично в крошечном проекте у меня была бы логика и html для страницы входа в одном файле ...

login.php:

<?php
/* These are our valid username and passwords */
$user = 'jonny4';
$pass = 'delafoo';
$error = null;

if (isset($_POST['username']) && isset($_POST['password')) {

    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) {    

        if (isset($_POST['rememberme'])) {
            /* Set cookie to last 1 year */
            setcookie('username', $_POST['username'], time()+60*60*24*365, '/account', 'www.example.com');
            setcookie('password', md5($_POST['password']), time()+60*60*24*365, '/account', 'www.example.com');

        } else {
            /* Cookie expires when browser closes */
            setcookie('username', $_POST['username'], false, '/account', 'www.example.com');
            setcookie('password', md5($_POST['password']), false, '/account', 'www.example.com');
        }
        header('Location: index.php');
        exit;
    } else {
        $error = 'Username/Password Invalid';
    }

} else {
    $error = 'You must supply a username and password.';
}
?>
<html>
<head>
<title>User Logon</title>
</head>
<body>
  <h2>User Login </h2>
  <?php echo $error ? $error.'<br>' : ''; ?>
  <form name="login" method="post" action="login.php">
   Username: <input type="text" name="username"><br>
   Password: <input type="password" name="password"><br>
   Remember Me: <input type="checkbox" name="rememberme" value="1"><br>
   <input type="submit" name="submit" value="Login!">
  </form>
</body>
</html>

index.php:

<?php
/* These are our valid username and passwords */
$user = 'jonny4';
$pass = 'delafoo';

if (isset($_COOKIE[['username']) && isset($_COOKIE['password')) {

    if (($_POST['username'] != $user) || ($_POST['password'] != md5($pass))) {    
        header('Location: login.php');
        exit;
    } else {
        echo 'Welcome back ' . $_COOKIE['username'];
    }

} else {
    header('Location: login.php');
    exit;
}
?>

Если вы серьезно, я бы посмотрел MVC (контроллер вида модели) и ООП (объектно-ориентированное программирование), чтобы увидеть, насколько это правильно. Но для простых вещей нет ничего особенно плохого в том, что вход в систему обрабатывается в верхней части представления, как в этом примере.

С моей точки зрения - работая на веб-фирму - я совершенно ненавижу это, когда наследую проект от нового клиента, а старый программист разделил все, что они могли, в новый файл. Термин «правильный инструмент для работы» также может применяться к базовому подходу к проекту. В некоторых случаях сайт настолько мал, что было бы огромной тратой времени на его проработку через фреймворк или создание сложной файловой системы. Все зависит от ваших потребностей, что станет ясно с опытом.

Одно можно сказать наверняка: все, кто сказал, что хранить имена пользователей и пароли в файлах cookie - это плохая идея, абсолютно правы. Обычно вы делаете что-то вроде сохранения уникального идентификатора и перекрестной ссылки с базой данных, чтобы получить соответствующую информацию о пользователе. Таким образом, ваши данные не могут быть взломаны каким-либо новичком или идиотом, оставив свои куки открытыми на своем рабочем столе.

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

Может быть опечаткой на странице проверки и сравнения значений с файлами cookie, а не с суперглобальными значениями POST.

if (isset($_COOKIE['username'],$_COOKIE['password'])) {

    if ($_COOKIE['username'] == $user && $_COOKIE['password'] == md5($pass)) {    
        echo 'Welcome back ' . $_COOKIE['username'];
    } else {
         header('Location: login.html');        
    }
} else {
    header('Location: login.html');
}
...