2012-04-03 5 views
-5

Я сейчас на своем уме. вот что я хочу знать, как я могу проверить информацию, предоставленную пользователем на моей странице входа (состоящей только из имени пользователя и логина) против того, что у меня есть в моей базе данных? я уже могу это сделать, но теперь моя проблема - это 2 вещи, которые я определил. 1) если предоставленная информация верна при сравнении с тем, что хранится в моей базе данных, тогда я хочу направить пользователя на другую страницу (я предполагаю, что метод ACTION в моем HTML позаботится об этом). но если вход неправильный, я хочу повторить страницу входа, чтобы они могли повторно ввести свои данные.php логин подтверждение

if ($p===$p1) 
{ 
    header("Location:success.php"); 
} 
else 
{ 
    header("Location:fail.php"); 
} 

выше мой код с $ р является значением из поля пароля на форме и $ p1 является значением из базы данных. что теперь происходит с этим кодом, так это то, что даже если пароли и даже имена пользователей не совпадают, пользователь все равно может получить доступ к страницам-членам. я смог определить, что проблема заключается в методе «заголовка». но даже если я обмениваю два вокруг пользователя, все равно направляется на success.php. если вы не понимаете суть моего вопроса, пожалуйста, я умоляю вас не игнорировать его, просто спросите меня, и я предоставлю дополнительную информацию. извините, но я не могу показаться, чтобы быть в состоянии получить

+0

Каков результат, когда вы 'echo'' $ p' и '$ p1'? Действительно ли это текст? Они равны? Также: я прочитал в вашем вопросе, что '$ p1' - это пароль из базы данных, начинающийся по сравнению с тем, что вводит пользователь - это BAD! Хранение паролей, незашифрованных (что необходимо при прямом сравнении с пользовательскими входами), является проблемой безопасности. Почему бы не перестроить его так, чтобы вы получали запись пользователя из базы данных на основе идентификатора пользователя и пароля. Если вы получили запись, логин был успешным. –

+0

как насчет примера кода? –

+0

да, я действительно получаю запись, и я сначала использую SQL для получения данных из базы данных, прежде чем сравнивать, поэтому в конце я сравниваю переменные, моя проблема заключалась в «заголовке» и тройке «=» – Riddle

ответ

2

Что вы предлагаете здесь не мешает пользователю доступ к страницам «членов» - однако он должен определить, на какую страницу отправляется пользователь после отправки пароля. Если последнее не так, то что-то не так происходит в другом месте кода.

Но, как я уже говорил, если вы хотите запретить пользователям, не прошедшим проверку подлинности, доступ к некоторым страницам, самым простым решением является установка флага в сеансе при аутентификации, например.

session_start(); 

if ($_POST['password']===stored_password($_POST['username'])) { 
    $_SESSION['authenticated']=$_POST['username']; 
    header("Location:success.php"); 
    exit; 
} else { 
    header("Location:fail.php"); 
    exit; 
} 

Тогда в верхней части каждого и каждую проверку подлинности страницы:

session_start(); 
if (!$_SESSION['authenticated']) { 
    header("Location:fail.php"); 
    exit; 
} 

(обратите внимание на явный выход после заголовка ('Location: ...');)

После того как вы у меня это лизали, тогда вы можете начать думать о восстановлении идентификатора сеанса при аутентификации, чтобы предотвратить проблемы с фиксацией/захватом сессии, а также хранить пароль пользователей как хэш, чтобы предотвратить проблемы с раскрытием.

+0

спасибо, этот тоже работает, но я встретил ошибку в своем браузере, которая читает ** Неустранимая ошибка: звонок в неопределенный function stored_password() в C: \ websites \ MySite \ logincheck.php **, когда я добавляю свой второй код на мою аутентифицированную страницу, но без этого последнего бита кода я получаю на следующей странице – Riddle

+0

функцию "stored_password() msgstr "не является функцией php по умолчанию.Я предполагаю, что symcbean означает, что вы должны создать функцию, которая возвращает пароль пользователя по ссылке на имя пользователя. – alphanyx

+0

хорошо, поэтому, если я исключаю функцию «stored_password()», то все работает отлично, однако теперь моя проблема заключается в том, что когда я добавляю ваш второй блок кода в начало страницы, к которой вы переходите, если вход успешно завершен, тогда пользователь отправляется на fail.php. поэтому я выхожу на конечность и предполагаю, что условие «если» имеет проблему, поскольку все работает без него ... есть ли способ исправить это? пожалуйста, помогите – Riddle

3

использовать это, если проверить, если элементы являются тем же

if ($p===$p1) { 

вы говорите $ р ваш почтовый переменный и $ p1 это данные из базы данных ...

Я не очень уверен, потому что я не вижу большой части вашего скрипта, но я бы ожидал, что вопрос if всегда верен, потому что вы используете три = символа «===» с тремя равными знаками вы проверяете тип переменной.

обе переменные от типа «массив» (насколько я ожидал), поэтому ваш вопрос всегда выглядит так

if (array === array) { 

и это всегда верно.

Необходимо указать свой вопрос.

if ($p['password'] == $p['password']) { 

или все, что вы хотите проверить.

Резюме: Насколько я могу видеть в своем коротком коде я бы ожидать, что проблемы являются тройной знак равенства

EDIT:

вы должны изменить свой логин. Лучший способ проверить через sql, если информация пользователя правильная.

Пример: $ sql = "SELECT id FROM user WHERE name = '". $ p ['name']. "'и password = MD5 ($ p [' password '])"

, а затем выполнить sql. Вы также можете использовать счетчик (*), чтобы проверить правильность информации о входе в систему. Если это неверно, возврат из базы данных невозможен.

+1

The == = оператор также сравнивает значения переменных, а не только тип. то есть 1 === 2 вернет false –

+0

спасибо, что сработал – Riddle

+0

да, что только что произошло. ну, пока это работает, но Mr_Chimp прав. Оператор === сравнивает значение и тип – alphanyx

4

what now happens with this code is that even if the passwords and even the usernames do not match, the user can still access member pages

Вам необходимо изучить основы сеансов.

несколько ссылок ссылки, которые помогут вам построить вашу первую страницу аутентификации:

PHP Login script tutorial
Php Simple Login Tutorial
Create Database Login Page with PHP

0

Попробуйте это:

var_dump($p); 
var_dump($p1); 

Это не решит проблему, но она покажет вам, что хранится в переменных и какой тип переменной они.

Какие значения вы ожидали?

Смежные вопросы