PHP: session_start () не работает на сервере, но на локальном хосте? - PullRequest
0 голосов
/ 06 декабря 2018

Я искал несколько часов, но не смог найти никакого решения.Надеюсь, вы мне поможете.

Я создал веб-сайт и протестировал его с xampp, и все работает хорошо, но теперь я загрузил его на сервер и понял, что session_start() не работает.

Это код моего index.php:

<?php 
            session_start();
            echo session_status()."<br>";
            echo "SessionID: ".session_id();

        error_reporting(E_ALL & ~E_NOTICE); 

?>

<html>


    <head>
        <link rel="stylesheet" type="text/css" href="stylesheet.css" media="screen" />
        <meta charset="UTF-8" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script>
            $(document).ready(function(){
              // Add smooth scrolling to all links
              $("a").on('click', function(event) {

                // Make sure this.hash has a value before overriding default behavior
                if (this.hash !== "") {
                  // Prevent default anchor click behavior
                  event.preventDefault();

                  // Store hash
                  var hash = this.hash;

                  // Using jQuery's animate() method to add smooth page scroll
                  // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area
                  $('html, body').animate({
                    scrollTop: $(hash).offset().top
                  }, 800, function(){

                    // Add hash (#) to URL when done scrolling (default click behavior)
                    window.location.hash = hash;
                  });
                } // End if
              });

              $(".loginField").click(function() {
                  $(".loginDetails").toggle("slow");
              });

              $(".profilName").click(function() {
                  $(".profilMenu").toggle("slow");
              });

              $("#middleLoginButton").click(function() {
                  $(".middleLoginForm").toggle("slow");
              });
            });
        </script>
    </head>

    <body>
        <!-- getting UserData, if available -->
        <?php

            //delete Session Data, if logout
            if (isset($_GET['logout']) && $_GET['logout'] == 1) {
               echo "SessionID Logout:".session_id();
               session_destroy();
               //header("Location:https://www.whocando.eu");
            }

            function autoload ($className) {
                if (file_exists('classes/'.$className.'.php')) {
                    require 'classes/'.$className.'.php';
                }
            }

            spl_autoload_register("autoload");

            if ($_GET['falsePassword'] == 1) {
                $falsePassword = 1;
            }

            if ((empty($_POST['userName']) || empty($_POST['password'])) && empty($_POST['registration'])) {
            // after Login Check! 
            } elseif (isset($_POST['userName']) && isset($_POST['password']) && !isset($_POST['registration'])) {
                $loginCheck = new loginParser();
                $userID = $loginCheck->loginChecker($_POST['userName'],$_POST['password']);
                $_SESSION['userID'] = $userID;

                $abfrage = new dbQuery("SELECT ID,name, firstName FROM db764570417.userdata WHERE ID = $userID");
                $userName = $abfrage->fetchData('ID','name');
                $userFirstName = $abfrage->fetchData('ID','firstName');

            // already logged in Check!
            } elseif (isset($_SESSION['userID'])) {
                $userID = $_SESSION['userID'];

                $abfrage = new dbQuery("SELECT ID,name, firstName FROM db764570417.userdata WHERE ID = $userID");
                $userName = $abfrage->fetchData('ID','name');
                $userFirstName = $abfrage->fetchData('ID','firstName');
            // after Registration Check!
            } elseif (isset($_POST['registration'])) {
                $name = $_POST['name'];
                $vorName = $_POST['vorname'];
                $email = $_POST['email'];
                $uni = $_POST['uni'];
                $geburtstag = $_POST['gebDatum'];
                $password = $_POST['passwort'];
                $confirmedPassword = $_POST['confirmPasswort'];
                $gebDatum = date("Y-m-d",strtotime($geburtstag));
                $abfrageEmail = new dbQuery("SELECT ID,email FROM db764570417.logindata");
                $userEmails = $abfrageEmail->fetchData('ID','email');

                if ($password != $confirmedPassword) {
                    header("Location:https://www.whocando.eu/registration.php?fault=passwordNotMatched&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (in_array($email,$userEmails)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=emailAlreadyUses&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (empty($name)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=nameMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                }elseif (empty($vorName)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=vorNameMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (empty($email)) {
                    header("Locationhttps://www.whocando.eu/:registration.php?fault=emailMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (empty($uni)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=uniMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                }elseif (empty($geburtstag)) {
                    header("Locationhttps://www.whocando.eu/:registration.php?fault=gebMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (empty($password)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=passwordMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } elseif (empty($confirmedPassword)) {
                    header("Location:https://www.whocando.eu/registration.php?fault=confirmedPasswordMissing&name=".$name."&vorname=".$vorName."&email=".$email."&uni=".$uni."&gebDatum=".$geburtstag);
                } else {
                    include ('dbConnection.php');

                    $date = date("Y-m-d H:i:s",time());
                    $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
                    $sqlCode = "INSERT INTO db764570417.logindata (name,email,password)
                      VALUES (?,?,?)";

                    $userNameDB = $vorName."".$name;

                    $statement = $mysqli->prepare($sqlCode);
                    $statement->bind_Param('sss',$userNameDB,$email,$hashedPassword);
                    $statement->execute();
                    $newUserId = $mysqli->insert_id;

                    $_SESSION['userID'] = $newUserId;

                    $sqlCode = "INSERT INTO db764570417.userdata (ID,name,firstName,firstLogin,lastLogin,birthDate,email,university)
                          VALUES (?,?,?,?,?,?,?,?)";

                    $statement = $mysqli->prepare($sqlCode);
                    $statement->bind_Param('isssssss',$newUserId,$name,$vorName,$date,$date,$gebDatum,$email,$uni);

                    $statement->execute();
                    //header("Location:index.php");

                    $userID = $newUserId;
                    $userFirstName[$userID] = $vorName;
                    $userName[$userID] = $name;
                }
            }

        ?>

Если я загружу страницу, то не будет создан идентификатор сессии, но если я протестирую точно такой же код на localhost, онработает.Я подумал, что с сервером возникла проблема, и загрузил файл со следующим кодом:

<?php
if (!isset($_SESSION)) {
    session_start();
    echo session_status();
    echo "SessionID: ".session_id();
}

echo "SessionID: ".session_id();
?>

Я сейчас совершенно сбит с толку и не знаю, какую ошибку я совершил.

Может кто-топомочь мне с этим?

Спасибо!

1 Ответ

0 голосов
/ 06 декабря 2018

Выполните следующий код и найдите session.save_path

<?php
    phpinfo();
?>

Просто добавьте права доступа к этому пути

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