2013-03-07 3 views
0

У меня есть небольшая проблема с моим скриптом входа в PHP. Когда пользователь входит в систему, он работает только после второй попытки, нет ошибки, но похоже, что пользователь ввел неправильный пароль с первой попытки.Форма входа в систему всегда занимает более одной попытки

Иногда, когда я тестировал сайт, после первого входа в систему он отправляет меня обратно на страницу входа в систему. Затем я вручную вводим URL-адрес домашней страницы, и он иногда туда меня оттуда. (Там есть php вверху, который проверяет, зарегистрирован ли пользователь уже так, что иногда угадывается, что скрипт в журнале устанавливает значение SESSION в true).

Большинство времени это не делает. Он просто перенаправит меня обратно в журнал, не распечатывая сообщение об ошибке. Я считаю, что проблема находится в верхней части домашней страницы, а не с помощью сценария входа в систему, потому что после удаления перенаправления, если mysql не возвращает строку с совпадением пользователя/пароля, она всегда направит меня на страницу регистрации.

Вот мой сценарий Войти

<?php 
session_start(); 
// Include required MySQL configuration file and functions 



// Check if user is already logged in 
if (isset($_SESSION['logged_in'])) { 
    // If user is already logged in, redirect to main page 
    redirect('home.php'); 
} 
else { 
     // Make sure that the user submitted a username/password and username 
     // only consists of alphanumeric Chars 

     if ((!isset($_POST['username'])) || (!isset($_POST['password'])) OR 
      (!ctype_alnum($_POST['username']))) { 

       redirect('login.php'); 
      } 

     // Connect to database 

     $mysqli = @new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 

     if (mysqli_connect_errno()) { printf ("Unable to connect to database %s", 
             mysqli_connect_error()); 
             exit(); 
      } 
     //Escape any unsafe characters before querying database 
     $username = $mysqli->real_escape_string($_POST['username']); 
     $password = $mysqli->real_escape_string($_POST['password']); 

     // construct SQL statement for query & execute 
     $sql = "SELECT * FROM peeps WHERE name = '" . $username . "' 
       AND pword = SHA1('" . $password . "') "; 

     $result = $mysqli->query($sql); 

     // If one row is returned, username and password are valid. 
     if ($result->num_rows == 1) { 
      // Set the session variable for login status to true 
      $_SESSION['logged_in'] = true; 
      $_SESSION['name'] = $username; 
      echo "successfull "; 
      redirect('home.php'); 
     } 
     else { 
       echo "didnt return row<hr>"; 
       redirect back to login page. 
       redirect('loginPage.php'); 
      } 
    } 
?> 

А вот код в верхней части моей домашней странице ..

<?php 
// Start session 
session_start(); 
// Include required functions file 
require_once('functions.php'); 
// Check login status... if not logged in redirect to login screen 
    if (check_login_status() == false) { 
     redirect('loginPage.php'); 
    } 
$username = $_SESSION['name']; 

?> 

Любая помощь будет признателен, если вы хотите немного больше пояснение о том, что я имею в виду, вы можете подписаться на gateKeeper и посмотреть, о чем я говорю.

Также это мой первый вопрос, поэтому любые комментарии по поводу того, как я его спросил, будут оценены.

Спасибо!

+0

Как выглядит функция 'redirect()'? Одна из потенциальных проблем заключается в том, что вы эхом отдаете все, прежде чем вы вызываете эту функцию, поэтому, если вы выполняете перенаправление «header» там, это может быть неудачно, поскольку заголовки уже отправлены. – jeroen

ответ

0

Попробуйте отладки, заменив

if (check_login_status() == false) { 
     redirect('loginPage.php'); 
    } 

с

if (!isset($_SESSION['name'])) { #could be any session variables that you like.. 
    redirect('loginPage.php'); 
} 

или сделать print_r($_SESSION) на верхней части главной страницы.

+0

Да, это сработало отлично! Спасибо за вашу помощь. Вы случайно не знаете, может ли его лучшая практика поместить это в функцию? или это нормально, просто оставить это заявление там? – tbird

+0

Добро пожаловать. Обычно я помещаю эту строку, чтобы увидеть, какая сессия не хранится, и оттуда я буду работать над решением для ее исправления. Если все в порядке, я удалю/прокомментирую это. – foxns7

0

Я предполагаю, что первая страница представляет собой скрипт, обрабатывающий форму из loginPage.php (или самого входа в систему) и вторую страницу, к которой вы обращаетесь после аутентификации.

Если я не ошибаюсь, проблема заключается в том, что иногда вы неправильно идентифицированы, и это перенаправляет вас снова на ваш логин. Можете ли вы показать нам, как код для функции check_login_status()?

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