Session

Halpha

Erfahrenes Mitglied
Hi und zwar, hab ich eine Seite auf der ich ein Login script schreiben wollte.

Das Script zum registrieren hat ohne probleme geklappt, hab jetzt eine Datenbank dazu in der die Registrieren leute gespeichert werden, dann hab ich mitm Login script angefangen und

session_start(); benutzt, gleich in der Zeile bringt er mir einen fehler:

Code:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /pfad/login.php:2) in /pfad/login.php on line 14

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /pfad/login.php:2) in /pfad/login.php on line 14

Hier noch der Code:

Code:
<?php 
session_start();
if(!isset($_POST['submit'])) { ?>
 <form action="<?php $PHP_SELF ?>" method="post">
 <table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
 <tr>
   <td bgcolor="#e7e7e7" align="center" colspan="2">
  <b>Bitte erst anmelden</b>
 </td>
    </tr>
    <tr>
      <td width="170" bgcolor="#e7e7e7">Benutzername</td>
      <td width="230" bgcolor="#ffffff"><input type="text" name="username" size="20" class="input"<?php if($_POST['username'] != "" ) {echo ' value="'.$_POST['username'].'"';} ?>></td>
   </tr>
    <tr>
     <td width="170" bgcolor="#e7e7e7">Passwort</td>
      <td width="230" bgcolor="#ffffff"><input type="password" name="password" size="20" class="input"></td>
    </tr>
    <tr>
      <td bgcolor="#e7e7e7" align="center" colspan="2">
      <input type="submit" name="submit" value="Anmelden" class="button">
      </td>
    </tr>
  </table>
  </form>
  <?php
  }elseif(!$_POST['username'] || $_POST['username'] == "") {
    echo '<p align="center">Username leer<br><br><a href="index.php?lang=de&">Zurück</a></p>';
  }elseif(!$_POST['password'] || $_POST['password'] == "") {
    echo '<form action="index.php?lang=de&" method="post">';
    echo '<p align="center">Pw error<br><br>';
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
    echo '<input type="submit" name="zurueck" value="Zurück">';
    echo '</p>';
    echo '</form>';
  }else{
    $password = md5($password);
    $query = @mysql_query("SELECT user, pass FROM users WHERE user = '".$_POST['username']."'") or die('Select ist fehlgeschlagen!');
    $result = @mysql_fetch_array($query) or die('<p align="center">Benutzer nicht vorhanden<br><a href="index.php?lang=de&">Zurück</a></p>');
   if($password != $result['pass']){
      echo '<form action="index.php?lang=de&" method="post">';
      echo '<p align="center">Pw ist falsch<br><br>';
      echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
     echo '<input type="submit" name="zurueck" value="Zurück"></p>';
      echo '</form>';
    die;
    }else{
      $user = $result['user'];
      session_register('user');
      echo '<p align="center">LogIn erfolgreich!<br><br><a href="sichere_seite.php">Weiter</a></p>';
    }
  }
  ?>
 

matth-ee

Mitglied
Hi Halpha!

Der Fehler entsteht dadurch, dass du auf deiner Seite vor der Funktion session_start() Zeichen ausgibtst. Häufige Fehlerquellen hierbei sind etwa Zeilenumbrüche vor dem <?php tag

lg
 

Halpha

Erfahrenes Mitglied
wie darf ich das dann verstehen;) ich include ja in der login.php meinen top bereich und menü und footer, muss ich dann ganz oben beim header session_start() setzen?

Lg

und danke für die antwort;)
 

matth-ee

Mitglied
Ja, genau!

session_start() verändert den Dateiheader. Dieser wird zum Beispiel zum Setzen von Cookies (was session_start() auch macht) verwendet. Der Header wird, wie der Name schon sagt, als Dateikopf vom Server gesendet, also sprich als erstes.
Wenn du nun schon eine Ausgabe von Zeichen vor deiner session_start() hast, kann diese die Dateiheader nicht mehr verändern und wirft somit deine Warnungen.
(ich hoffe das war so verständlich)


Nachzulesen
http://de.wikipedia.org/wiki/Header und
http://at.php.net/manual/de/function.session-start.php

lg
 

Halpha

Erfahrenes Mitglied
Gibts da auch noch eine andere möglichkeit für den Fehler? evlt an der xhtml version oder sowas? weil der bringts noch immer:(

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
 <title>design beispiel</title> 
 <link rel="stylesheet" type="text/css" href="css/import.css"/> 
 <link rel="stylesheet" type="text/css" href="css/inhalt.css"/> 
</head><body><br /> 
<b>Warning</b>:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /var/www/124/Halpha/gss/common.php:7) in <b>/var/www/124/Halpha/gss/common.php</b> on line <b>7</b><br /> 
<br /> 
<b>Warning</b>:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /var/www/124/Halpha/gss/common.php:7) in <b>/var/www/124/Halpha/gss/common.php</b> on line <b>7</b><br />

ist jetzt reiner Seiten Quelltext, das einzige was mich daran stört ist der zeilenumbruch gleich nach body, aber weiß net wo der herkommt..

lg
 

Parantatatam

mag Cookies & Kekse
Du gibt's doch bevor du deine Sitzung startest bereits Text aus:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
 <title>design beispiel</title> 
 <link rel="stylesheet" type="text/css" href="css/import.css"/> 
 <link rel="stylesheet" type="text/css" href="css/inhalt.css"/> 
</head><body>
 

Halpha

Erfahrenes Mitglied
ich hab jetzt sogar mein <title> entfernt, ist zwar meiner meinung nach käse wenn man net mal das stehen haben darf :D aber naja,

aber trotzdem immer noch der gleiche Fehler, und meine stylsheets werd ich ja lassen können?

Lg
 

Da Hacker

Erfahrenes Mitglied
Hi Halpha,

es kursiert ein kleiner Bug mit einigen Texteditoren, der dir jetzt vielleicht auch die Suppe hätte versalzt haben.

Probier mal in deinem Texteditor den Text von Anfang bis Ende zu kopieren(selektieren! und nicht mit STRG+A) und in eine neue Datei reinzukopieren(hier auch nicht die erste Datei kopieren, Inhalt löschen - sondern komplett neu anlegen).

Ist nur ein Versuch. Ich hatte das Problem kürzlich, weil mein Rechner abgestürzt ist und es sind auch einige Foreneinträge dazu zu finden.

Denn wenn du definitiv keine Zeichen vor deinem Session_Start() ausgibst(ausgenommen natürlich dem öffnenden PHP-Tag), dann befürchte ich nämlich, dass es dieser Bug ist.

Beste Grüße,
Adam
 

Parantatatam

mag Cookies & Kekse
an Halpha: Egal was du ausgibst, sei es jetzt ein Verweis zu Stylesheets oder sonst etwas, ist schon eine Ausgabe an den Bildschirm und zählt dementsprechend als Ausgabe. session_start() muss noch davor aufgerufen werden.
 

Halpha

Erfahrenes Mitglied
ich versteh schon wie das funktionieren sollte;) nur wie geb ich dann den title der seite an, Stylesheets im Header ist eigentlich auch standard;)

hat da jemand ne Lösung;)?

LG