Avatar billede Frederik Nybegynder
01. november 2009 - 16:43 Der er 9 kommentarer og
1 løsning

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by...

Hej.

Jeg får følgende fejlmeddelelse på min side:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /customers/***.dk/***.dk/httpd.www/index.php:1) in /customers/***.dk/***.dk/httpd.www/index.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /customers/***.dk/***.dk/httpd.www/index.php:1) in /customers/***.dk/***.dk/httpd.www/index.php on line 1

min index.php ser således ud:

<? session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
   
    <?
    $pageid = $_GET['pageid'];
    ?>
   
<html>

<head>
<title>www.***.dk</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>



<body>
<div id="center">
   
    <div id="banner">
   
    </div>

    <div id="menu">
      <div id="menutop"><h1>Menu</h1></div>
      <div id="menucontent">
        <?
        include "menu.php";
        ?>
        </div>
      <div id="menubund"></div>
    </div>

    <div id="content">
    <div id="contenttop"></div>
    <div id="contentmidt">

        <?
        if($pageid == "1"){ include("content/forside.php");
        }
        else if($pageid == "2"){ include("content/info.php");
        }
        else if($pageid == "3"){ include("content/artikler.php");
        }
        else if($pageid == "4"){ include("content/aktiviteter.php");
        }
        else if($pageid == "5"){ include("content/skadesliste.php");
        }
        else if($pageid == "6"){ include("content/links.php");
        }
        else if($pageid == "7"){ include("content/sitemap.php");
        }
        else if($pageid == "8"){ include("admin/login/adduser.php");
        }
        else if($pageid == "9"){ include("admin/login/adduser_confirm.php");
        }
        else if($pageid == "10"){ include("admin/login/login.php");
        }
        else if($pageid == "11"){ include("admin/login/login_confirm.php");
        }
        else { include("content/forside.php");
        }
        ?>

    </div>

    <div id="contentbund"><br><br></div>
    </div>



   
</div>
</body>


</html>


Hvad er det jeg gør galt?










Ligeledes har jeg problemer med mit login.

i login_confirm.php får jeg fejlmeddelelsen:

Warning: Cannot modify header information - headers already sent by (output started at /customers/***.dk/***.dk/httpd.www/index.php:1) in /customers/***.dk/***.dk/httpd.www/admin/login/login_confirm.php on line 35



min login_confirm.php ser således ud:
<div class="indholdtop"><h1>Login</h1></div>
<div class="indholdcontent">
   
<?
$pageid = $_POST['pageid'];
require("config.php");
$login = $_POST['login'];
if(empty($login)) {
?>
<p>
  <?php echo 'Denne side kræver login adgang';?>
</p>
<?php
} else {
    $username = $_POST['username'];
    $password = md5($_POST['password']);

    if(empty($username) || empty($password)) {
   
    ?>
    <P>
        <?php echo 'Felterne "Brugernavn" og "Password" skal udfyldes!'; ?>
    </P>
<?php   
    } else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());
        $tael = mysql_query("SELECT rank FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
        $antal = mysql_num_rows( $tael );

        if($antal == 1) {
            $_SESSION['login'] = true;
            $row = mysql_fetch_assoc($tael);
            $_SESSION['rank'] = $row['rank'];
            header("location: index.php?pageid=$pageid");
            exit;
        } else {
        ?>
        <p>
          <?php echo 'Forkerte login oplysninger!';?>
           
            </p>
            <?php
        }
    }
}
?>
   
   
</div>
<div class="indholdbund"></div>
<br><br>




Jeg håber I kan hjælpe mig :)


- XuZeM
Avatar billede Slettet bruger
01. november 2009 - 16:45 #1
Slet det mellemrum eller linjeskift du har før første linje. Så burde det virke.
Avatar billede Frederik Nybegynder
01. november 2009 - 17:07 #2
Der er intet linjeskift eller mellemrum før <? session_start(); ?>.. ?
Avatar billede Frederik Nybegynder
01. november 2009 - 17:37 #3
Jeg har fået løst første problem nu...

da filen blev gemt som UTF-8 blev den samtidigt gemt med BOM characters og derfor blev filen ikke tolket rigtigt..


mem jeg kan stadig ikke finde en løsning på mit andet problem:

Warning: Cannot modify header information - headers already sent by (output started at /customers/***.dk/***.dk/httpd.www/index.php:4) in /customers/***.dk/***.dk/httpd.www/admin/login/login_confirm.php on line 35



- XuZeM
Avatar billede dkfire Nybegynder
01. november 2009 - 17:48 #4
Den siger jo også alt hvad den behøver.
Du skriver noget html ud på linje 4 i index.php og kan derfor ikke bruge header() på linje 35 i en fil du inkludere.

Eller rettere du smider ALT for meget html ud før du bruger header(). Du må ikke skrive noget som helst til browseren FØR du bruger header().
Avatar billede Frederik Nybegynder
01. november 2009 - 17:53 #5
hvordan får jeg så omskrevet koden?

Hvis login er ok, skulle den gerne åbne i samme side igen.
Avatar billede Slettet bruger
01. november 2009 - 17:55 #6
Ja, det har jeg selv haft bøvl med. Jeg kunne bare ikke regne ud at det var det der var problemet på beskrivelsen.

Jeg tror nærmest det letteste er at referere til et af mine egne svar på et andet lignende spørgsmål:
http://www.eksperten.dk/spm/890216#reply_7474623

En let måde at fikse problemet på er ved at bruge PHP's indbyggede output buffering, "ob". Dette gøres ved at indlede siden med linjen:
<?php ob_start();?>
Og afslutte den med:
<?php ob_end_flush();?>

Ta' eventuelt selv et kig på funktionen:
http://php.net/manual/en/function.ob-start.php
Avatar billede Slettet bruger
01. november 2009 - 17:56 #7
Heh, to svar mens jeg skrev. Ovenstående var til #3.
Avatar billede Frederik Nybegynder
01. november 2009 - 18:25 #8
øøhm.. nu har jeg prøvet at komme udenom header, men jeg er ikke så sikker i php, så jeg ved ikke om det spolerer hensigten med forrige kode?


min login_confirm.php:
<?
$pageid = $_POST['pageid'];
require("config.php");
$login = $_POST['login'];
if(empty($login)) {
?>

    <div class="indholdtop"><h1>Fejl!</h1></div>
    <div class="indholdcontent">
   
<p>
  <?php echo 'Denne side kræver login adgang';?>
</p>
    </div>
    <div class="indholdbund"></div>
    <br><br>

<?php
} else {
    $username = $_POST['username'];
    $password = md5($_POST['password']);

    if(empty($username) || empty($password)) {
   
    ?>
    <div class="indholdtop"><h1>Fejl!</h1></div>
    <div class="indholdcontent">
   
    <P>
        <?php echo 'Felterne "Brugernavn" og "Password" skal udfyldes!'; ?>
    </P>
    </div>
    <div class="indholdbund"></div>
    <br><br>
<?php   
    } else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());
        $tael = mysql_query("SELECT rank FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
        $antal = mysql_num_rows( $tael );

        if($antal == 1) {
            $_SESSION['login'] = true;
            $row = mysql_fetch_assoc($tael);
            $_SESSION['rank'] = $row['rank'];
?>

<?php
include("admin/login/login_req.php");
?>

<?php
        } else {
        ?>
    <div class="indholdtop"><h1>Fejl!</h1></div>
    <div class="indholdcontent">
   
            <p>
          <?php echo 'Forkerte login oplysninger!';?>
           
            </p>
    </div>
    <div class="indholdbund"></div>
    <br><br>
            <?php
        }
    }
}
?>

login_req.php:
<?php
if($_SESSION['login'] == true){
?>
<?php
if($_SESSION['rank'] == 1){
?>
<div class="indholdtop"><h1>Logget ind som Adminstrator</h1></div>
    <div class="indholdcontent">
   
            <p>
          <?php
echo "Du er logget ind som Adminstrator";
?>
           
            </p>
    </div>
    <div class="indholdbund"></div>
    <br><br>

<?php
} else {}
?>
<?
} else {
?>

<div class="indholdtop"><h1>Fejl!</h1></div>
    <div class="indholdcontent">
   
            <p>
          <?php
echo("Denne side kræver adminstrator rettigheder.");
?>
           
            </p>
    </div>
    <div class="indholdbund"></div>
    <br><br>

<?php
}
?>
Avatar billede Slettet bruger
02. november 2009 - 19:05 #9
Nu snupper jeg lige noget ud af sammenhæng her:

    <br><br> Indhold her. Sendes i body. Hvis headeren ikke allerede er det bliver den afsendt.
<?php 
    } else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());
        $tael = mysql_query("SELECT rank FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
        $antal = mysql_num_rows( $tael );

        if($antal == 1) {
            $_SESSION['login'] = true; Cookie her. Sendes i header. Hvis headeren allerede er afsendt, hvilket den er, opstår en fejl, som i dit eksempel.
            $row = mysql_fetch_assoc($tael);
            $_SESSION['rank'] = $row['rank'];
?>

Løsningen er enten at flytte alt med sessions til starten af dokumenter, før indhold, eller at bruge output-buffering, som tidligere beskrevet, i starten: <?php ob_start();?> og i slutningen af dokumentet: <?php ob_end_flush();?>

Jeg håber det svarede på spørgsmålet :)
Ellers må du lige læse det indlæg jeg linkede til:
http://www.eksperten.dk/spm/890216#reply_7474623
Avatar billede Frederik Nybegynder
07. november 2009 - 13:13 #10
- lukker

Gemte UTF-8 filen uden BOM characters og slettede header funktionen.
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

IT-JOB

Netcompany A/S

IT Consultant

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-Sikkerhedsrådgiver til Cyberdivisionen i Hvidovre

KMD A/S

E2E Tester

Netcompany A/S

Test Consultant