Невозможно заставить сеанс работать для входа на сайт php 7.2 - PullRequest
0 голосов
/ 02 апреля 2019

Я изучаю PHP, поэтому я создаю сайт для входа. Когда пользователь вводит действительные учетные данные, страница должна быть перенаправлена ​​на /site.php, однако при вводе действительных кредитов она перенаправляется обратно на index.php. Я делаю это с доменом www.example.xyz на порте 8080, работающем на apache2.

Я проверял, что сеансы работают, проверяя в новых файлах следующее: https://www.w3schools.com/php7/php7_sessions.asp

Я просто не уверен, что я делаю неправильно в моем коде

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

index.php

<?php

session_start();

require_once 'classes/membership.php';

$membership = new Membership();



if(isset($_GET["status"]) && $_GET["status"] == "loggedout")

{

    $membership->logOut();

}



if($_POST && !empty($_POST["username"]) && !empty($_POST["pwd"]))

{

    $response = $membership->validateUser($_POST["username"], $_POST["pwd"]);

}

 ?>



<!DOCTYPE html>



<head>



        <title>Login Page</title>

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <script src = "http://code.jquery.com/jquery-3.3.1.min.js"></script>



        <body>



            <div>



                <form method="post" action="">

                    <h2>Login <small>enter your credentials</small></h2>



                    <p>

                        <label for="name">Username: </label>

                        <input type="text" name="username" />

                    </p>



                    <p>

                        <label for="pwd">Password: </label>

                        <input type="password" name="pwd" />

                    </p>



                    <p>

                        <input type="submit" id="submit" value="Login" name="submit" />

                    </p>



                </form>



                <?php if(isset($response)) echo "<h4>" . $response . "</h4>"; ?>



            </div>



        </body>



</head>

site.php

<?php
require_once 'classes/membership.php';

$membership = new Membership();

$membership->confirmMember();

echo phpinfo();

?>
<html>
<body>
<p>
  <a href = "index.php?status=loggedout">Log Out</a>
</p>
</body>
</html>

membership.php

<?php

require_once 'mysql.php';
class Membership
{
  function validateUser($un,$pw)
  {
    $mysql = new Mysql;
    $validateCreds = $mysql->verifyUserAndPass($un,md5($pw));

    if($validateCreds)
    {
      $_SESSION["status"] == "authorized";
      header("location: /site.php");
    }

    else
    {
      return "Enter valid creds.";
    }
  }

  function logOut()
  {
    if(isset($_SESSION["status"]))
    {
      unset($_SESSION["status"]);
    }

    if(isset($_COOKIE[session_name()]))
    {
      setcookie(session_name(),'',time() - 10000);
    }

    session_destroy();
  }

  function confirmMember()
  {
    if($_SESSION["status"] != "authorized")
    {
      header("location: /index.php");
    }
  }
}
 ?>

и Mysql вернет true, если введены действительные кредиты.

Ожидаемые результаты - при вводе действительных кредитов страница /site.php должна загружаться. После того, как пользователь нажал «выйти» на site.php, он не должен позволять им заходить на www.example.xyz:8080/site.php и направлять их обратно на index.php

.

Фактические результаты: Пользователь вводит действительные кредиты и перенаправляется на index.php. В сетевых веб-инструментах в Firefox я вижу, что страница /site.php была достигнута, но получил HTTP 302, а затем снова загружается index.php, поэтому я что-то не так делаю с сессиями.

1 Ответ

0 голосов
/ 02 апреля 2019

Вам не хватает начала сеанса.Я бы добавил его в конструктор класса членства.Может быть и другие вещи, но я думаю, что это бросается в глаза.

Также вы используете == при настройке параметра сеанса.Используйте = только.

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