【问题标题】:PHP: session_start() doesn't work on Server, but on localhost?PHP:session_start() 在服务器上不起作用,但在本地主机上?
【发布时间】:2019-05-08 05:11:46
【问题描述】:

我现在搜索了几个小时,但找不到任何解决方案。我希望你能帮助我。

我创建了一个网站并使用 xampp 对其进行了测试,并且eververthing 运行良好,但现在我将其上传到服务器上,我发现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;
                }
            }

        ?>

如果我加载页面,则不会创建会话 ID,但如果我在 localhost 上测试完全相同的代码,它就可以工作。 我认为服务器有问题并使用以下代码上传了一个文件:

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

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

我现在完全糊涂了,不知道自己犯了什么错误。

有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 启用错误报告php.net/manual/en/function.error-reporting.php 看到您正在使用它会返回什么?
  • 检查 /tmp/ 目录及其权限。
  • 您在本地主机上运行的 PHP 版本是否与您的服务器相同?
  • 检查查询中的错误,我们不知道这些函数的作用。您还应该在每个标题后添加exit;
  • HTTP 标头的内容必须经过 URL 编码 (urlencode()) 并且您应该像 Funky49 所说的那样退出程序。

标签: php ajax database forms session


【解决方案1】:

执行以下代码,找到session.save_path

<?php
    phpinfo();
?>

只需为该路径添加正确的权限

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多