【问题标题】:session_start(); Warning? [duplicate]session_start();警告? [复制]
【发布时间】:2019-08-12 00:05:57
【问题描述】:

我最近切换到另一个主机...所以我不得不更改整个数据库名称和凭据,但现在我的一个登录不再工作了。

我的用户登录完美无缺,但我的管理员登录无法使用,因为我更改了主机。

他现在给我这个错误:

警告:session_start() [function.session-start]:当标头已在 /****/*************/***/** 中发送时无法启动会话******/news_login.php 在第 2 行

我会很感激你的回答:)

我不知道该怎么办

<?php
    session_start();

    require_once 'mysql.php';
    $db = new DB();
  ?>

<html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

      <title>Euro Trans GmbH | Admin LogIn</title>

      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
      <script src="https://kit.fontawesome.com/c96bf7b876.js"></script>

      <style>
        .bd-placeholder-img {
          font-size: 1.125rem;
          text-anchor: middle;
          -webkit-user-select: none;
          -moz-user-select: none;
          -ms-user-select: none;
          user-select: none;
        }

        @media (min-width: 768px) {
          .bd-placeholder-img-lg {
            font-size: 3.5rem;
          }
        }

        body {
          display: -ms-flexbox;
          display: flex;
          -ms-flex-align: center;
          align-items: center;
          padding-top: 40px;
          padding-bottom: 40px;
          background-color: #333333;
        }

        form {
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translateX(-50%) translateY(-50%);
        }
      </style>
    </head>
    <body class="text-center">

      <?php
          if($db->isUserLoggedIn() === TRUE) {
            echo "<div style='position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%);'><p style='color: white;'>Du bist bereits eingeloggt!</p><a href='logout.php' class='btn btn-outline-success my-2 my-sm-0' type='submit' alt='Ausloggen'>Ausloggen</a></div>";
          } else {
            if(isset($_POST['einloggen'])) {
              $email = $_POST['email'];
              $passwort = sha1($_POST['passwort']);

              if($db->login($email, $passwort) === TRUE) {
                echo "<br /><p>Erfolgreich eingeloggt!</p><br />";
              } else {
                echo "<br />Einloggen fehlgeschlagen!<br />";
              }
            }
       ?>

      <form class="form-signin" action="news_login.php" method="POST">
        <img src="images/default.png" alt="logo" width="200" height="200" style="border-radius: 20px; margin-right: 5%;">
        <h1 class="h3 mb-3 font-weight-normal" style="color: white;">Administrator Login</h1>
        <label for="inputEmail" class="sr-only">Email-Adresse</label>
          <input type="email" style="margin-top: 30px;" name="email" class="form-control" placeholder="Email-Adresse" required autofocus>
        <label for="inputPassword" class="sr-only">Passwort</label>
          <input type="password" style="margin-top: 3px;" name="passwort" class="form-control" placeholder="Passwort" required>
        <button class="btn btn-lg btn-primary btn-block" type="submit" name="einloggen" style="margin-top: 20px;">Einloggen</button>
        <br>
        <p><a href="index.php" style="color: white; text-decoration: underline;">Zurück zu Startseite</a></p>
        <p class="mt-5 mb-3 text-muted">&copy; <script>document.write(new Date().getFullYear());</script> by Euro Trans GmbH. All Rights Reserved</p>
      </form>

      <?php
    }
       ?>
    </body>
  </html>
<?php

    class DB {
      private static $_db_username      = "***********";
      private static $_db_password      = "***************";
      private static $_db_host          = "*******";
      private static $_db_name          = "*************";
      private static $_db;

      function __construct() {
        try {
          self::$_db = new PDO("mysql:host=" . self::$_db_host . ";dbname=" . self::$_db_name, self::$_db_username, self::$_db_password);
        } catch (PDOException $e) {
          echo "Datenbankverbindung gescheitert!";
          die();
        }
      }

      function isUserLoggedIn() {
        $stmt = self::$_db->prepare("SELECT user_id FROM admins WHERE Session=:sid");
        $sid = session_id();
        $stmt->bindParam(":sid", $sid);
        $stmt->execute();

        if($stmt->rowCount() === 1) {
          return true;
        } else {
          return false;
        }
      }

      function login($userMail, $pw) {
        $stmt = self::$_db->prepare("SELECT user_id FROM admins WHERE Email=:usermail AND Passwort=:pw");
        $stmt->bindParam(":usermail", $userMail);
        $stmt->bindParam(":pw", $pw);
        $stmt->execute();

        if ($stmt->rowCount() === 1) {
          $stmt = self::$_db->prepare("Update admins SET Session=:sid WHERE Email=:usermail AND Passwort=:pw");
          $sid = session_id();
          $stmt->bindParam(":sid", $sid);
          $stmt->bindParam(":usermail", $userMail);
          $stmt->bindParam(":pw", $pw);
          $stmt->execute();

          return true;
        } else {
          return false;
        }
      }

      function logout() {
        $stmt = self::$_db->prepare("Update admins SET Session='' WHERE Session=:sid");
        $sid = session_id();
        $stmt->bindParam(":sid", $sid);
        $stmt->execute();
      }

      function getAllEntries($sort = "DESC") {
        if ($sort != "ASC" && $sort != "DESC") {
          return -1;
        }
          $stmt = self::$_db->prepare("SELECT eintraege.eintrag_id, eintraege.header, eintraege.datum, eintraege.eintrag, admins.Vorname, admins.Nachname FROM eintraege INNER JOIN admins ON eintraege.autor = admins.user_id ORDER BY datum " . $sort);
          $stmt->execute();

          return $stmt->fetchAll(PDO::FETCH_ASSOC);
      }

      function createNewNews($titel, $news) {
        $stmt = self::$_db->prepare("INSERT INTO eintraege (header, eintrag, autor) VALUES(:titel, :news, :autor)");
        $autorID = self::getUserID();
        $stmt->bindParam(":titel", $titel);
        $stmt->bindParam(":news", $news);
        $stmt->bindParam(":autor", $autorID);
        if($stmt->execute()) {
          return true;
        } else {
          return false;
        }
      }

      function getUserID() {
        $stmt = self::$_db->prepare("SELECT user_id FROM admins WHERE Session=:sid");
        $sid = session_id();
        $stmt->bindParam(":sid", $sid);
        $stmt->execute();

        return $stmt->fetch(PDO::FETCH_OBJ)->user_id;
      }

      function getUserName() {
        $stmt = self::$_db->prepare("SELECT Vorname, Nachname FROM admins WHERE Session=:sid");
        $sid = session_id();
        $stmt->bindParam(":sid", $sid);
        $stmt->execute();

        $user = $stmt->fetch(PDO::FETCH_OBJ);

        return $user->Vorname . " " . $user->Nachname;
      }

      function getUserNameByID($userID) {
        $stmt = self::$_db->prepare("SELECT Vorname, Nachname FROM admins WHERE user_id=:userid");
        $stmt->bindParam(":userid", $userID);
        if($stmt->execute()) {
          if ($stmt->rowCount() === 1) {
          $user = $stmt->fetch(PDO::FETCH_OBJ);

          return $user->Vorname . " " . $user->Nachname;
          } else {
            return "";
          }
        } else {
          return "";
        }
      }

      function getEntryByID($id) {
        $stmt = self::$_db->prepare("SELECT * FROM eintraege INNER JOIN admins ON eintraege.Autor = admins.user_id WHERE eintrag_id=:id");
        $stmt->bindParam(":id", $id);

        if ($stmt->execute()) {
          if ($stmt->rowCount() === 1) {
            return $stmt->fetch(PDO::FETCH_OBJ);
          } else {
            return false;
          }
        } else {
          return false;
        }
      }

      function editEntry($titel, $news, $date, $id) {
          $stmt = self::$_db->prepare("UPDATE eintraege SET
                datum=:datum,
                header=:titel,
                eintrag=:news
                WHERE eintrag_id=:id");

          $date = date('Y-m-d H:i:s', strtotime($date));

          $stmt->bindParam(":id", $id);
          $stmt->bindParam(":datum", $date);
          $stmt->bindParam(":news", $news);
          $stmt->bindParam(":titel", $titel);

          if($stmt->execute()) {
              return true;
          } else {
              return false;
          }
      }

      function deleteEntry($id) {
        $stmt = self::$_db->prepare("DELETE FROM eintraege WHERE eintrag_id=:id");
        $stmt->bindParam(":id", $id);

        if($stmt->execute()) {
            return true;
        } else {
            return false;
        }
      }
    }
 ?>


我希望没有错误,但实际上我有一个错误......

错误:

“警告:session_start() [function.session-start]:当标头已在 /*****/*******/*******/** 中发送时无法启动会话**/news_login.php 在第 2 行"

【问题讨论】:

    标签: php html twitter-bootstrap


    【解决方案1】:

    在调用session_start(); 之前,您已将输出打印或发送给用户/浏览器。

    检查您的&lt;?php 标记之前是否没有任何空格、回车或换行符。

    【讨论】:

    • 那我该怎么办?
    • 错误在第2行,可能是php标签前有空格或字符。
    • 现在错误消失了,但样式完全被破坏了
    • 这是一张图片Picture
    • 现在无法登录
    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多