Как добавить сессию в PHP Войти - PullRequest
0 голосов
/ 04 марта 2020

Это код, на котором я включил сеансы, и он не работает. Я не уверен, что я сделал неправильно. Я включил сессии в неправильном месте на моей странице входа? Я новичок в PHP, поэтому любая помощь будет отличной. Я включил свой логин. php и мою домашнюю страницу. php, которые я хочу защитить.

Логин. php

<?php
// Always start this first
session_start();


$username = $_POST['username'];
$password = $_POST['password'];

//connect to server and database 

$conn = mysqli_connect ("localhost", "root", "", "horses");
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "Success: a propper connection was made! <br>";
echo "Host information: " . mysqli_get_host_info($conn);
// Query the users table if there is matching rows equal to the $username
$myQuery = "SELECT * FROM users WHERE username='$username'";
$result = mysqli_query ($conn, $myQuery);

$exists = $result->num_rows; //checks if username exists 

$table_users = "";
$table_password= "";

if ($exists > 0) 
{ //if there is no returning rows or no existing username 
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
    { //DISPLAY ALL ROWS FROM QUERY 
        // THE FIRST USERNAME ROW IS PASSED ONTO THE $TABLE_USERS, AND SO ON UNTILL THE QUERY IS FINISHED
        $table_users = $row ['username'];
        // the first password row is PAassed on to the $table_users and so on until the query is finished 
        $table_password = $row['password'];
        $table_role = $row['RoleID'];
    }//while
    // check if there are any mactching fields 
    if ($username == $table_users && ($password == $table_password)) 
    { 
        if ($table_role == 1)
            header ("location: CHomePage.php"); // takes the user to the Customer Homepage 
        else if ($table_role == 2) 
            header ("location: HomePage.php"); // takes the user to the Staff Homeage
    }//if
    else 
    {
        echo "<script>alert('Incorrect Username or Password!');</script>"; //Prompts the user 
        echo "<script>window.location.assign('login.php');</script>"; //redirects to login.php
    }//else
    {
        $_SESSION['UserID'] = $userid;
    }
}//if

mysqli_free_result($result);
mysqli_close($conn);
?>

Это моя домашняя страница. php

<div class="Main"> 
<?php
// You'd put this code at the top of any "protected" page you create

// Always start this first
session_start();

if ( isset( $_SESSION['UserID'] ) ) {
    // Grab user data from the database using the user_id
    // Let them access the "logged in only" pages
} else {
    // Redirect them to the login page
    header("Location:Login.php");
}
?>

This is the home page
   <img src="images/homepic.jpg" width="1000" height="628" alt=""/> 



</div>

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Как ваш комментарий говорит:

// Always start this first

И все же, вы проигнорировали свой собственный совет и поставили его выше его:

<div class="Main"> 

Призыв к session_start() должен быть первое, что на странице. Перед любым включением, перед любым другим кодом, перед любым выводом HTML.


Я также заметил это в вашем коде:

    {
        $_SESSION['UserID'] = $userid;
    }

Без сопровождающего оператора if. Это намеренно? Вы бы хорошо справились со следующим стандартным стилем кодирования, так как многие ошибки начинающих, которые я здесь вижу, маскируются из-за плохого отступа и / или непоследовательного использования пробелов. См. PSR-1 и PSR-12 , которые являются скучными стандартными документами, но они не являются техническими и довольно легко читаются.

0 голосов
/ 04 марта 2020

Прежде всего убедитесь, что вы понимаете, как работают сеансы:

https://www.w3schools.com/php/php_sessions.asp

Когда вы начинаете сеанс, PHP будет случайным образом Значение «cook ie» и отправьте сообщение cook ie в заголовках HTML следующей отправленной страницы. Браузер пользователя будет хранить этот код ie и предоставлять его при последующих обменах HTTP. Но, вы должны быть уверены, что заголовок set-cookie: действительно получен! «Перенаправление» не сделает этого: вам нужно отправить страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...