Переменные сеанса работают на локальном хосте, но не на веб-сервере - PullRequest
0 голосов
/ 01 мая 2019

Мои сеансы работают на локальном хосте, но всякий раз, когда я пытаюсь использовать их на своем веб-сервере (000webhost) для моего проекта класса информатики, создается впечатление, что они не "сохраняются" на всех страницах.

Когда я делаю print_r($_SESSION); на своей странице входа в систему (после нажатия кнопки входа в систему), массив возвращает полные значения, которые я ввел заранее. Я также попытался выяснить, не связана ли это с моим подключением к базе данных, но когда я пытаюсь извлечь значения из таблиц, все работает просто отлично.

Когда я пытаюсь print_r($_SESSION); на "home.php", массив становится пустым.

<?php
   if($_POST) {

   $connection = new PDO('mysql:host=localhost;dbname=noah', 'noah','password'); //changed the connection details because it's not usefull here

   if(empty($_POST['username']) OR empty($_POST['password'])) {
       ?>

       <div class="alert error">
     <p>Please fill in all the fields</p>
       </div>

      <script>
         $(".alert").fadeIn("500");
      </script>

      <?php

   } else {
       $username = $_POST['username'];
       $password = $_POST['password'];
       $password = hash('sha512', $password);

       $verifyExistingUser = $connection->query("SELECT name FROM user WHERE username = '$username' AND password = '$password'");

       foreach ($verifyExistingUser as $key => $value) {
           retrievedUser = $value['name'];
       }


       if (empty($retrievedUser)) {

       ?>

       <div class="alert error">
          <p>Incorrect username / password</p>
       </div>
       <script>
          $(".alert").fadeIn("500");
       </script>

       <?php

       } else {
           try {
             session_start();
             $_SESSION["username"] = $username;
             $_SESSION["name"] = $retrievedUser;
             $_SESSION["password"] = $password;

             print_r($_SESSION);
             echo "retrieved name from database: " . $retrievedUser;
         echo "<script type='text/javascript'>window.location.href = 'home.php';</script>";

           } catch(PDOException $e) {
              echo "error: " . $e->getMessage();
       }
     }
   }
}
?>

Редактировать 1
Полный код после некоторых исправлений (вывод Cannot modify header information - headers already sent by (output started at /storage/ssd2/777/7604777/public_html/process/loginProcess.php:2) in /storage/ssd2/777/7604777/public_html/process/loginProcess.php on line 70).
Я понимаю, что это является HTML-кодом в PHP, но я хотел бы включить в него некоторые jQuery и CSS, как мне это исправить?

<?php session_start(); ?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" type="text/css" href="assets/css/php.css">
    </head>
    <body>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
            <?php
            error_reporting(E_ALL);
            ini_set("display_errors", 1);

                if($_POST) {

                    $connection = new PDO('mysql:host=localhost;dbname=noah', 'noah','password');

                    if(empty($_POST['username']) OR empty($_POST['password'])) {

                        ?>

                            <div class="alert error">
                                <p>Please fill in all the fields</p>
                            </div>

                            <script>
                                $(".alert").fadeIn("500");
                            </script>

                        <?php

                    } else {

                        $username = $_POST['username'];
                        $password = $_POST['password'];
                        $password = hash('sha512', $password);

                        $verifyExistingUser = $connection->query("SELECT name FROM user WHERE username = '$username' AND password = '$password'");


                        foreach ($verifyExistingUser as $key => $value) {

                                $retrievedUser = $value['name'];

                        }

                        if (empty($retrievedUser)) {

                            ?>

                                <div class="alert error">
                                    <p>Incorrect username / password</p>
                                </div>

                                <script>
                                    $(".alert").fadeIn("500");
                                </script>

                            <?php

                        } else {

                            try {

                                $_SESSION["username"] = $username;
                                $_SESSION["name"] = $retrievedUser;
                                $_SESSION["password"] = $password;
                                print_r($_SESSION); //debugging
                                echo "retrieved name from database: " . $retrievedUser; //debugging
                                header('location: ' . 'home.php');

                            } catch(PDOException $e) {

                                echo "error: " . $e->getMessage();

                            }

                        }

                    }

                }

            ?>
    </body>
</html>

1 Ответ

1 голос
/ 01 мая 2019

Предложение 1 Пожалуйста, используйте session_start () вверху вашей php-страницы.

Предложение 2 перенаправить на другую страницу, есть простой способ сделать это,

header('location: ' . 'http://site.url.you.want');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...