在php中创建cookie

问题描述 投票:0回答:3

我正在尝试从PHPNerds中学习如何使用Cookie。我在运行他们提到的脚本时遇到了麻烦(我几乎理解了代码的作用,但是我无法获取将使用哪个名称存储的代码)。它们如下,

用户登录

<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');
}
?>

提前感谢。

php cookies setcookie remember-me
3个回答
2
投票

好,我现在知道了,

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(模型视图控制器)和OOP(面向对象的编程),以了解它的适用性。但是对于基本的事情,在此示例的视图顶部处理登录没有什么特别的错误。

[从我的角度来看-在一家网络公司工作-我绝对讨厌它,因为我从新客户那里继承了一个项目,而老程序员将他们可能的一切都分成了一个新文件。术语“正确的工作工具”也可以适用于项目的基本方法。在某些情况下,站点如此之小,以至于浪费时间通过框架或建立精细的文件系统来工作。这完全取决于您的需求,这将随着经验的积累而变得显而易见。

可以肯定的是-每个说将用户名和密码存储在cookie中的人都是一个坏主意,这是绝对正确的。通常,您可以执行一些操作,例如存储唯一的ID并与数据库进行交叉引用,以提取相关的用户信息。这样,您的数据就不会被任何新手黑客或白痴劫持,从而使他们的Cookie在桌面上保持打开状态。


0
投票

可能是验证页面中的错字,并与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');
}

0
投票

这是另一种方式,请尝试此。

<?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;
   }
  ?>
© www.soinside.com 2019 - 2024. All rights reserved.