Я пытаюсь использовать 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>
Это отличный пример плохого кода.
Спасибо за публикацию. Многие люди могут прочитать это и извлечь уроки из этого.
Позвольте мне объяснить.
PHP может помочь вам найти некоторые непонятные ошибки. Не все, а некоторые из них.
Например, если вы неправильно набрали имя переменной, PHP выдаст ошибку ... конечно, если вы позволите PHP сказать.
Чтобы сделать каждую ошибку видимой, уровень отчетов об ошибках должен быть максимальным.
Для этого каждый скрипт должен содержать следующую строку:
error_reporting(E_ALL);
после добавления, если он был правильно написан кода, вы увидите только одно сообщение об ошибке, указывающее на неверно введенную переменную.
Но.
Вместо этого вы увидите водопад ошибок.
Потому что PHP не может отличить преднамеренные ошибки от случайных.
Таким образом.
В коде не должно быть преднамеренных ошибок, чтобы вы могли видеть случайные.
Это великий урок, который стоит запомнить.
Что это за ошибки?
имя пользователя
, оно должно быть записано как «имя пользователя»
. echo "$ msg";
должно быть echo $ msg;
) if ((! $ _ POST [имя пользователя]) || (! $ _ POST [пароль])) {
if (! empty ($ _ POST ["имя пользователя"]) ИЛИ! empty ($ _ POST ["пароль"])) {
С таким кодом вы будете видеть только случайную ошибку и сможете немедленно ее исправить.
Иногда это самое простое решение. То же самое случилось со мной. Я работал на локальном хосте (wampserver). Я обнаружил, что мой брандмауэр блокирует все запросы файлов cookie с localhost. В то время я использовал ZoneAlarm, но предполагаю, что другие брандмауэры могут иметь такой же эффект.Попробуйте отключить брандмауэр, чтобы проверить, не работает ли он по-прежнему.
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;
};