我正在尝试使用带身份验证的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>
Run Code Online (Sandbox Code Playgroud)
当点击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>
Run Code Online (Sandbox Code Playgroud)
这是糟糕代码的一个很好的例子。
感谢您发布它。很多人都可以阅读并从中学习。
让我解释。
PHP 可以帮助您发现一些不起眼的错误。不是每个人,而是其中一些人。
例如,如果你输错了一个变量名,PHP 就会抛出一个错误……当然如果你让 PHP 说的话。
为了使每个错误都可见,必须将错误报告级别设置为最高。为此,每个脚本都必须包含此行:
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
添加后,如果代码编写正确,您只会看到一条指向错误键入的变量的错误消息。但。
相反,您会看到错误的瀑布。因为 PHP 无法区分故意错误和偶然错误。
因此。代码中一定不是故意的错误,只是为了让您看到偶尔出现的错误。
这是值得记住的伟大教训。
这些错误是什么?
username,它必须写成"username"。echo "$msg";必须是echo $msg;)if ((!$_POST[username]) || (!$_POST[password])) {if (!empty($_POST["username"]) OR !empty($_POST["password"])) {使用这样的代码,您只会看到偶尔的错误,并且能够立即更正它。
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |