Avatar billede rubaek Mester
26. marts 2020 - 20:15 Der er 5 kommentarer og
1 løsning

Cannot start session when headers already sent

Jeg har kørt dette script på min lokale maskine, og her kører det fint. Når jeg så lægger det op på min webhotel, så fejler det.

Warning: session_start() [function.session-start]: Cannot start session when headers already sent in /var/www/gmonskole.dk/public_html/testkompasset/tk/includes/session.php on line 2

Index.php
<?php
  ob_start();
  require_once('includes/load.php');
  if($session->isUserLoggedIn(true)) { redirect('home.php', false);}
?>
<?php include_once('layouts/header.php'); ?>
<div class="login-page">
    <div class="text-center">
      <h1>Welcome</h1>
      <p>Sign in to start your session</p>
    </div>
    <?php echo display_msg($msg); ?>
      <form method="post" action="auth.php" class="clearfix">
        <div class="form-group">
              <label for="username" class="control-label">Username</label>
              <input type="name" class="form-control" name="username" placeholder="Username">
        </div>
        <div class="form-group">
            <label for="Password" class="control-label">Password</label>
            <input type="password" name= "password" class="form-control" placeholder="password">
        </div>
        <div class="form-group">
                <button type="submit" class="btn btn-info  pull-right">Login</button>
        </div>
    </form>
</div>
<?php include_once('layouts/footer.php'); ?>

session.php
<?php
session_start();

class Session {

public $msg;
private $user_is_logged_in = false;

function __construct(){
  $this->flash_msg();
  $this->userLoginSetup();
}

  public function isUserLoggedIn(){
    return $this->user_is_logged_in;
  }
  public function login($user_id){
    $_SESSION['user_id'] = $user_id;
  }
  private function userLoginSetup()
  {
    if(isset($_SESSION['user_id']))
    {
      $this->user_is_logged_in = true;
    } else {
      $this->user_is_logged_in = false;
    }

  }
  public function logout(){
    unset($_SESSION['user_id']);
  }

  public function msg($type ='', $msg =''){
    if(!empty($msg)){
      if(strlen(trim($type)) == 1){
        $type = str_replace( array('d', 'i', 'w','s'), array('danger', 'info', 'warning','success'), $type );
      }
      $_SESSION['msg'][$type] = $msg;
    } else {
      return $this->msg;
    }
  }

  private function flash_msg(){

    if(isset($_SESSION['msg'])) {
      $this->msg = $_SESSION['msg'];
      unset($_SESSION['msg']);
    } else {
      $this->msg;
    }
  }
}

$session = new Session();
$msg = $session->msg();

?>
Avatar billede olsensweb.dk Ekspert
26. marts 2020 - 20:23 #1
>session.php
><?php
>session_start();


mulige fejl
du har et linjeskift før <?php
du har indlæst noget HTML før <?php
din fil er gemt som utf8 med BOM

https://www.php.net/manual/en/function.session-start.php
Avatar billede rubaek Mester
26. marts 2020 - 20:40 #2
Der var et linieskift efter ?> i filen load.php
Avatar billede Slater Ekspert
27. marts 2020 - 06:42 #3
#2: Det må der gerne være - det kan ikke have været problemet.

Rent bortset fra det, anbefales det at man ikke afslutter med ?>, hvis det er det sidste der er i filen.
Avatar billede Slater Ekspert
27. marts 2020 - 10:33 #4
Nej vent, min fejl - load blev indlæst i toppen af filen, så det kan sagtens være problemet.

Stadig - afslut aldrig med ?> hvis der ikke er HTML efter det. Så undgår du det problem.
Avatar billede olsensweb.dk Ekspert
27. marts 2020 - 11:32 #5
nu kan jeg ikke se hvor session.php bliver indlæst fra, men gætter på det er fra load.php
kunne det tænkes der var et mellemrun eller "andet snavs" før <?php i load.php

@rubaek har du checked hvilke format session.php er gemt som ?? (og de andre filer, index, load)
har du ikke sammen filformat, og charset i alle filer får du problemer med æøå


@Slater hvad er dine erfaringer med ob_start(); bruger det ikke selv
https://www.php.net/manual/en/function.ob-start.php
Avatar billede rubaek Mester
29. marts 2020 - 22:08 #6
Løsning se længere oppe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester