我正在尝试从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是灵活的。您既可以将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在桌面上保持打开状态。
可能是验证页面中的错字,并与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');
}
这是另一种方式,请尝试此。
<?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;
}
?>