Gå til innhold

[Løst] Problemer med session_start


Anbefalte innlegg

Vel, jeg er igjen her med enda et spørsmål. Jeg har kommet frem til skriptet nedenfor. Dette skal vise filene som ligger i kunder mappen, og alt funket fint helt til jeg lastet det opp på webserveren min. Jeg utviklet og laget alt på xampp, og hadde null error meldinger der, men med en gang jeg lastet det opp på webserveren min fikk jeg disse errorene:

 

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at PATH/fil.php:1) in PATH/fil.php on line 1

Warning: Cannot modify header information - headers already sent by (output started at PATH/fil.php:1) in PATH/fil.php on line 5

 

<?php session_start(); ?>
<?
// Sjekker om brukeren er på
if (!isset($_SESSION['username'])) {
       header('Location: index.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<title>Kunder</title>
</head>

<div id="wrap">
<div id="innhold">
<div class="header">Oversikt over kunder</div>
<?php 
// Mappe
$dirPath = 'kunder';

if ($handle = opendir($dirPath)) {

  while (false !== ($file = readdir($handle))) {

     // Filer som skal ignoreres
     if ($file != "." && $file != ".." && $file != "index.php" && $file != "feil.php" && $file != "utvikler") {
        if (is_dir("$dirPath/$file")) {
           // Mappe
    echo "<img src='css/bilder/mappe.png' /> ";
           echo "<a href='kunder/$file'>$file</a><br>";
        } else {
           // Fil
           echo "<a href='$file'>$file</a><br>";
        }
     }
  }

  closedir($handle);
}
?>

<br/><i>Trykk på din mappe.</i>

</div>

<div id="meny">
<div class="header">
	Meny
</div>
<a href="logout.php">Logg ut</a>
</div>

</div>
</body>
</html>

Lenke til kommentar
Videoannonse
Annonse

småtrøtt og den feilmeldingen kan oppstå pga mye rart.

 

Kan si om "username" innholder noen nordiske tegn? hvilken os er det på webserveren og hvilken er det på pc-en?, har du noen merkelig path name der du bruker -, _, osv på webserveren?

 

~edit, og er kodene innholdet i fil.php filen?

Endret av MisterIT
Lenke til kommentar

Legg til

<? ob_start(); ?>

helt på toppen av .php siden din, og

<? ob_flush(); ?>

helt i bunnen av den.

 

Ikke spør meg hvorfor denne feilen kommer opp, men har hatt samme problemet og fant ut at dette virket

 

Rettelse. Gjør slik:

<?php
ob_start();
session_start(); 
// Sjekker om brukeren er på
if (!isset($_SESSION['username'])) {
       header('Location: index.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<title>Kunder</title>
</head>

<div id="wrap">
<div id="innhold">
       <div class="header">Oversikt over kunder</div>
<?php 
// Mappe
$dirPath = 'kunder';

if ($handle = opendir($dirPath)) {

  while (false !== ($file = readdir($handle))) {

     // Filer som skal ignoreres
     if ($file != "." && $file != ".." && $file != "index.php" && $file != "feil.php" && $file != "utvikler") {
        if (is_dir("$dirPath/$file")) {
           // Mappe
           echo "<img src='css/bilder/mappe.png' /> ";
           echo "<a href='kunder/$file'>$file</a><br>";
        } else {
           // Fil
           echo "<a href='$file'>$file</a><br>";
        }
     }
  }

  closedir($handle);
}
ob_flush();
?>
<br/><i>Trykk på din mappe.</i>

</div>

<div id="meny">
       <div class="header">
               Meny
       </div>
       <a href="logout.php">Logg ut</a>
</div>

</div>
</body>
</html>

Endret av Leakim1991
Lenke til kommentar

ALTID når du får error tilsvarnde: "header is already sent" så kan det løses dette med ob_start() & ob_end_flush() - Jeg mener tydlig å huske at jeg har nevnt dette for deg i en tidligere tråd.

 

Edit:

Om du får en error alà "Header is already sent.." så er løsningen å bruke ob_start(); ob_end_flush(); om jeg husker rett. Se PHP.net for vidre info om disse.

Endret av warpie
Lenke til kommentar

Hei, takk for svar!

 

Jeg har prøvd med ob_start(); og ob_end_flush(); uten hell.. Får den samme erroren, noe som jeg ikke forstår. Burde ha nevnt at jeg allerede har prøvd dette i tråden, men men.

 

Brukernavnet er noe så enkelt som admin. Kan det ha noe med at login siden min "outputer" noen form for session som ikke blir lukket?

 

Index.php

<?php

session_start();

// Sjekker om brukeren er på
if (isset($_SESSION['username'])) {
       header('Location: main');
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<title>Kunder</title>
</head>

<body>
<div id="midtboks">
<div class="header">Logg inn</div>

	<table border="0">
	<form method="POST" action="logginn.php">
	<tr><td>Brukernavn</td><td>:</td><td><input type="text" name="username" size="20"></td></tr>
	<tr><td>Passord</td><td>:</td><td><input type="password" name="password" size="20"></td></tr>
	<tr><td> </td><td> </td><td><input type="submit" value="Logg inn"></td></tr>
	</form>
	</table>

</div>
</body>
</html>

Lenke til kommentar

Feilen skyldes at tekst har blitt printet ut før du redirecter, den beste måten å løse dette på er dermed å fjerne all tekst før redirect.

 

En typisk feil kan være at noen hvite linjer eller mellomrom har klart å havne før <?php taggen, dette regnes som tekst og fører til en slik feil. Sjekk derfor nøye etter dette.

 

Det bør ikke bli noen problemer så lenge ingen tekst outputer før redirecten.

 

ob_start() og ob_end_flush() er en måte å løse problemet på, men det er på ingen måte den ultimate løsningen og etter min mening er det bedre å faktisk løse feilen i stedet for å "skjule" den ved hjelp av slike metoder.

Endret av Warz
  • Liker 1
Lenke til kommentar

Dette er hele koden. Har ingen includes eller requires, så jeg skjønner ikke hvorfor det ikke funker. Alt funket strålende på xampp, men så fort jeg flyttet det over til webserveren min fikk jeg errorer..

 

@Warz, problemet mitt er sessions, og den delen er jo helt først på alle sider, så jeg skjønner ikke hva du mener med at tekst har allerede blitt printet ut. Kunne du forklare denne delen litt nærmere? Jeg har ingen mellomrom før <?php taggen, og jeg har prøvd å fjerne alle mellomrom, og så å si det meste som kan gjøres.

Endret av Rigo
Lenke til kommentar

EDIT:

Ser ut som jeg løste problemet med å legge til @ foran session. Får fortsatt en error om at jeg ikke kan bruke header, og jeg har sett på det og, men det funker ikke med ob_flush..

 

Har samme problem på mange av sidene mine, hvor jeg bruker header på f. eks linje 40. Alt funket fint på xampp, men gikk rett vest da jeg flyttet det over til webserveren..

 

Error:

Warning: Cannot modify header information - headers already sent by (output started at /PATH/main.php:1) in /PATH/main.php on line 9

 

Full kilde:

<?php

ob_start();

@session_start();

// Sjekker om brukeren er på
if (!isset($_SESSION['username'])) {
       header('Location: index.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="css/stil.css" type="text/css" />
<title>Kunder</title>
</head>

<div id="wrap">
<div id="innhold">
<div class="header">Oversikt over kunder</div>
<?php 
// Mappe
$dirPath = 'kunder';

if ($handle = opendir($dirPath)) {

  while (false !== ($file = readdir($handle))) {

     // Filer som skal ignoreres
     if ($file != "." && $file != ".." && $file != "index.php" && $file != "feil.php" && $file != "utvikler") {
        if (is_dir("$dirPath/$file")) {
           // Mappe
    echo "<img src='css/bilder/mappe.png' /> ";
           echo "<a href='kunder/$file'>$file</a><br>";
        } else {
           // Fil
           echo "<a href='$file'>$file</a><br>";
        }
     }
  }

  closedir($handle);
}
ob_flush();
?>

<br/><i>Trykk på din mappe.</i>

</div>

<div id="meny">
<div class="header">
	Meny
</div>
<a href="loggut.php">Logg ut</a>
</div>

</div>
</body>
</html>

Endret av Rigo
Lenke til kommentar

Du har forsatt ikke løst session delen, @ fjerner error-output. Dermed eksisterer forsatt problemet ditt.

Endret av Gjest
Lenke til kommentar

Både session_start() og header() krevet at INGENTING har blitt sendt til browseren før de kjører.

Eksempel på ugyldig kode:

 

Eksempel 1:

 <?php
session_start();
header('Location: index.php');

Eksempel 2:

<?php session_start();
?> 
<?php
header('Location: index.php');

 

Ser du feilen? Ikke? Her er fasiten og feilen er markert med X

 

Eksempel 1:

X<?php
session_start();
header('Location: index.php');

Eksempel 2:

<?php session_start();
?>X
<?php
header('Location: index.php');

 

Ved å sette @ foran session_start() vil du skjule feilen som advarer deg at noe har blitt printet ut. Ironisk nok fører feilmeldingen til output i seg selv, men å skjule denne outputen hjelper deg ikke siden feilmeldingen advarer om at du har output! Du må altså finne hvor du har blanke mellomrom eller linjer utenfor <?php ?> taggene.

 

Jeg ville startet enkelt, ta mitt eksempel 1 og fiks feilen:

<?php
session_start();
if (!isset($_SESSION['username'])) 
{
header('Location: index.php');
}

 

Så lenge denne er plassert helt øverst i ditt php dokument og helt opp i hjørnet skal det fungere.

Endret av Warz
Lenke til kommentar

Jeg er 100% sikker på at det ikke er noen mellomrom. Har gått igjennom snart 20 ganger, og jeg skjønner ikke hvorfor dette ikke vil funke. Har jo fått så mange svar fra så mange av dere, og ingenting funker.

 

<?php
session_start();
if (!isset($_SESSION['username'])) 
{
header('Location: index.php');
}
?>

 

Funker ikke.. Får erroren igjen.

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mounted-storage/home145/sub039/sc79186-ZXQA/kunder/main.php:1) in /mounted-storage/home145/sub039/sc79186-ZXQA/kunder/main.php on line 2

 

-------------------------------------------------------------------

 

 

Jeg får fortsatt denne erroren om jeg bruker det som står nedenfor:

Warning: Cannot modify header information - headers already sent by (output started at /mounted-storage/home145/sub039/sc79186-ZXQA/kunder/main.php:1) in /mounted-storage/home145/sub039/sc79186-ZXQA/kunder/main.php on line 6

 

Dette er det jeg har øverst nå.

<?php 
@session_start();

// Sjekker om brukeren er på
if (!isset($_SESSION['username'])) {
       header('Location: index.php');
}

echo ($_SESSION['username'])

?>

Endret av Rigo
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...