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>';
    }
  }
  ?>
 
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
 
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;)
 
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
 
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
 
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>
 
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
 
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
 
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.
 
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
 
Zurück