[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация пользователя
Ольга Секретно
Всем доброго времени суток!
Изучаю php недавно. Необходимо сделать авторизацию пользователя на страницу администратора. Чудным образом все работало, и чудным образом перестало работать. В чем беда - не понимаю. Помогите, пожалуйста.

Фаил lock.php - страница, на которой происходит авторизация пользователя.

<html>
<
title> Страница администратора </title>
<
link href="css/style.css" rel="stylesheet" type="text/css">
</
head>
<
body>

<!--
Подключение шапки сайта-->
<? include ("blocs/header.php"); ?>

<tr>
<
td height="100%" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<
tr>
<
td width="1" height="100%" valign="top" background="images/sub_bot.gif" bgcolor="#c2ddfe" class="sub">

<!--
Подключение меню сайта-->
<? include ("blocs/lefttd1.php"); ?>

<tr>
<
td> </td>
</
tr>
<
tr>
<
td><img src="images/spacer.gif" width="186" height="1"></td>
</
tr>
</
table></td>
<
td valign="top" bgcolor="#e1e6f8"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<
tr>
<
td class="welcome"> <center>
<
form action="login.php" method="post">
<
table>
<
tr>
<
td>Логин:</td>
<
td><input type="text" name="login" /></td>
</
tr>
<
tr>
<
td>Пароль:</td>
<
td><input type="password" name="password" /></td>
</
tr>
<
tr>
<
td></td>
<
td><input type="submit" value="Войти" /></td>
</
tr>
</
table>
</
form>
</
td>
</
tr>
<
tr>
<
td height="100%" class="base_txt">
<
p>

</
p>
</
td>
</
tr>
</
table></td>
</
tr>
</
table></td>
</
tr>
<
tr>
<
td height="1" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">

<!--
Подключение нижней строки сайта-->
<? include ("blocs/futer.php"); ?>

</table></td>
</
tr>
</
table>
</
body>
</
html>


Фаил login.php - обработчик
<?
if (isset($_POST['login'])) {
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];
// Проверка логина на плохие смиволы
if(!preg_match("/^\w{3,}$/", $login))
die('Неверный пароль');

$link = mysql_connect('localhost',$dbuser,$dbpass);
if (!$link) {
die('Не удалось соединиться с БД');
}else{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);

// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");
}
}

?>


Сейчас, если ввести любые данные (верные или неверные), то браузер переходит на страницу администратора. Как же сделать так, чтобы обработчик фильтровал своих и чужих?

Помогите, пожалуйста, исправить ошибку.

Styling by linker.



Спустя 28 минут, 9 секунд (29.04.2011 - 17:34) DedMorozzz написал(а):
Не хватает только ещё всё большими буквами наисать. А то читабельность слишком низная
Оформите код в соответствующие теги. Для подсветки

Спустя 32 минуты, 8 секунд (29.04.2011 - 18:06) Игорь_Vasinsky написал(а):
ВОт этот вот кусок оссобенно интересный (в конце файла):

// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");

Спустя 1 день, 16 часов, 36 минут, 39 секунд (1.05.2011 - 10:43) Guest написал(а):
и что с этим куском делать то?

Спустя 4 минуты, 26 секунд (1.05.2011 - 10:47) quickxyan написал(а):
то что session_start(); надо писать перед выводом чего либо в браузер. лучше всего одной из первых строчек

Спустя 5 часов, 48 минут, 37 секунд (1.05.2011 - 16:36) walerus написал(а):

<?php
if (isset($_POST['login']))
{
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];

// Проверка логина на плохие смиволы
if(!preg_match("/^\w{3,}$/", $login))
die('Неверный Логин'); // Проверяем вроде логин, а у Вас написано - неверный Пароль

$link = mysql_connect('localhost',$dbuser,$dbpass);
// Мне одному интересно от куда возьмутся данные ( $dbuser, $dbpass ) для подключения к базе ??

if (!$link)
{
die('Не удалось соединиться с БД');
}
else
{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);

// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION

session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");
}
}

?>


Интересно от куда берутся данные для переменных:
$login - логин понятно, ВОЗМОЖНО из _POST переменной
$password - а вот с паролем проблема, он нигде не обозначен никак

Еще непонятно, для чего шифровать пароль, если он никуда не передается?
[php]$passwordHash = md5($_POST['password']);[php]

$passwordHash - где оно используется то?


и Да !, в итоге, если Вы подключились каким то тайным образом к базе, то перейдете на index.php.

И как выглядит,называется - страница администратора?

Спустя 22 минуты, 33 секунды (1.05.2011 - 16:58) Basili4 написал(а):
может просто шорт теги отключили ?

Спустя 9 дней, 21 час, 46 минут, 34 секунды (11.05.2011 - 14:45) Ольга Секретно написал(а):
а что это? помогите мне, пожалуйста, не работает авторизация(((((((((

Спустя 4 минуты, 35 секунд (11.05.2011 - 14:49) T1grOK написал(а):
По логике вещей $passwordHash и надо подставлять в запрос. И еще неважно какой логин и пароль введешь, все равно авторизируешься.)

Спустя 3 дня, 21 час, 10 минут, 18 секунд (15.05.2011 - 12:00) Guest написал(а):
авторизация заработала, но, если я помещаю php-скрипт в html-файл, то получается ошибка:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 50

что это такое? Помогите исправить.
Вот код файла login.php

<html>
<
title> Страница администратора </title>
<
link href="css/style.css" rel="stylesheet" type="text/css">
</
head>
<
body>

<!--
Подключение шапки сайта-->
<? include ("blocs/header.php"); ?>

<tr>
<
td height="100%" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<
tr>
<
td width="1" height="100%" valign="top" background="images/sub_bot.gif" bgcolor="#c2ddfe" class="sub">

<!--
Подключение меню сайта-->
<? include ("blocs/lefttd1.php"); ?>

<tr>
<
td> </td>
</
tr>
<
tr>
<
td><img src="images/spacer.gif" width="186" height="1"></td>
</
tr>
</
table></td>
<
td valign="top" bgcolor="#e1e6f8"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<
tr>
<
td class="welcome">
<?
Error_Reporting(E_ALL & ~E_NOTICE);
if (isset($_POST['login'])) {
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];
// Проверка логина на плохие смиволы
if(!eregi("^([A-Za-z0-9А])", $login)) { die('Неверный пароль');}

$link = mysql_connect('localhost', 'php', '12345');
if (!$link) {
die('Не удалось соединиться с БД');
}else{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);

// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
// Если определена страница с которой мы пришли,
// на нее и переадресуем, либо на главную

if (isset($_SERVER['HTTP_REFERER']))
header ("location: index.php");
}
}



?>
</td>
</
tr>
<
tr>
<
td height="100%" class="base_txt">
<
p>

</
p>
</
td>
</
tr>
</
table></td>
</
tr>
</
table></td>
</
tr>
<
tr>
<
td height="1" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">

<!--
Подключение нижней строки сайта-->
<? include ("blocs/futer.php"); ?>

</table></td>
</
tr>
</
table>
</
body>
</
html>

Спустя 11 минут, 3 секунды (15.05.2011 - 12:11) XCross написал(а):
Ну дак....

В самом начале(до HTML-тегов) session_start();

header ("location: index.php");

Должен быть до любого вывода в браузер.

Спустя 13 секунд (15.05.2011 - 12:11) quickxyan написал(а):
Guest
ну что ж ты будешь делать.

Цитата (Guest @ 15.05.2011 - 09:00)
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();


эта строчка должна быть в самом верху!


header ("location: index.php");

а эта команда должна быть использована до любого вывода инфы в браузер.

Спустя 10 минут, 54 секунды (15.05.2011 - 12:22) Guest написал(а):
Всем спасибо, авторизация заработала как надо)))

Спустя 22 часа, 44 минуты, 28 секунд (16.05.2011 - 11:06) Админ написал(а):
Цитата
if(!eregi("^([A-Za-z0-9А])", $login)){die('Неверный пароль');}

Так между делом - eregi стоило бы на preg_match заменить
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.