Session funktion funktioniert nicht

Alles, was PHP betrifft, kann hier besprochen werden.

Session funktion funktioniert nicht

Postby darklord » 25. October 2006 21:40

Hallo,

also ich habe folgendes problem ich habe gerade einen login programmier und jetzt will ich den min sessio noch etwas sicherer machen doch wenn ich versuche session zu verwenden bekomme ich folgende fehlermeldung:
Code: Select all
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\BIOS\xampp\htdocs\test\login2.php:5) in G:\BIOS\xampp\htdocs\test\login2.php on line 7

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at G:\BIOS\xampp\htdocs\test\login2.php:5) in G:\BIOS\xampp\htdocs\test\login2.php on line 7


mein code:
Code: Select all
  <?php
  session_start();
  $_SESSION['test']="funktioniert";
$form="<form id=\"form\" name=\"form\" method=\"post\" action=\"login.php\">";
$form.="<p><input type=\"hidden\" name=\"test\" value=\"1\"/>";
$form.="</p>";
$form.="<p><label>"; 
$form.="Username";
$form.="<input name=\"user\" type=\"text\" id=\"user\" />";
$form.="</label>";
$form.="</p>";
$form.="<p>";
$form.="<label>Passwort ";
$form.="<input name=\"pass\" type=\"password\" id=\"pass\" />";
$form.="</label>";
$form.="</p>";
$form.="<p>";
$form.="<label>";
$form.="<input type=\"submit\" name=\"Submit\" value=\"LogIn\" />";
$form.="</label>";
$form.="</p>";
$form.="</form>";
echo($form);
if($_POST['test']==1){
$user = $_POST['user'];
$link = mysql_connect("localhost","root","xxxxxxxx");
mysql_select_db("test", $link);
$sql = "SELECT pass FROM login WHERE user LIKE '$user'";
$ergebnis = mysql_query($sql,$link);
$array = mysql_fetch_array($ergebnis);
if($array['pass'] == $_POST['pass']){
echo "eingeloggt";
unset($_POST['test']);
echo "<script type=\"text/javascript\">function go(){location.href=logged.php}window.setTimeout(\"go()\", 3000);</script>";
}
else{
echo "falsches passwort";
}
}

?>


PS ich verwende XAMPP v. 1.5.4a
darklord
 
Posts: 23
Joined: 29. September 2006 19:53

Postby Wiedmann » 25. October 2006 22:44

Eigentlich steht ja schon in der Fehlermeldung das Problem (kann man IMHO auch im PHP-Manual zu session_start() nachlesen):
Vor dieser Funktion darf es keine Ausgabe an den Browser geben.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby darklord » 26. October 2006 12:37

ja das schon aber ich habe session_start(); schon einmal in ein vollkommen leeres dokument geschrieben und das dann getestet und ich bekomme die gleiche fehlermeldung

:?: :?: :?:

PS: cookies funktionieren auch nicht also vermute ich das problem könnte bei xampp liegen, oder?
darklord
 
Posts: 23
Joined: 29. September 2006 19:53

Postby Wiedmann » 26. October 2006 13:00

ja das schon aber ich habe session_start(); schon einmal in ein vollkommen leeres dokument geschrieben und das dann getestet und ich bekomme die gleiche fehlermeldung

Dann war das Dokument nicht vollkommen leer. Leerzeichen, Zeilenumbrüche und der UTF8-BOM sind z.B. auch Zeichen die an den Browser geschickt werden.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby darklord » 26. October 2006 13:10

aloso so:
Code: Select all
<htm>
<?php
session_start();
?>
</html>
sieht das dokument aus ich glaube nicht das da irgendetwas anderes als session_start(); zum browser geschikt wird^^
und trozdem kommt die fehlermeldung:
Code: Select all
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at G:\BIOS\xampp\htdocs\test\logged.php:2) in G:\BIOS\xampp\htdocs\test\logged.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at G:\BIOS\xampp\htdocs\test\logged.php:2) in G:\BIOS\xampp\htdocs\test\logged.php on line 3
darklord
 
Posts: 23
Joined: 29. September 2006 19:53

Postby Wiedmann » 26. October 2006 14:09

ich glaube nicht das da irgendetwas anderes als session_start(); zum browser geschikt wird^^

Aha, das "<htm>" + das CR ("<?php" steht ja in einer neuen Zeile) wird also nicht zum Browser geschickt? ...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby darklord » 26. October 2006 15:06

achso ich habe gemeint es darf nichts von php zum browser geschikt werden
darklord
 
Posts: 23
Joined: 29. September 2006 19:53

Postby sari42 » 05. November 2006 21:16

mein code:
Code: Select all
  <?php
da darf nicht einmal ein leerzeichen vor " <?php" stehen!
sari42
 
Posts: 800
Joined: 27. November 2005 18:28

Postby hoergen » 12. January 2007 08:40

In der php.ini ist eine recht unglückliche Startkonfiguration

ändere mal bei session.save_path in folgendes um:

Code: Select all
session.save_path = "0;600;C:\Temp



Dem hoergen
hoergen
 
Posts: 11
Joined: 12. January 2007 08:30

Postby KingCrunch » 12. January 2007 09:51

sari42 wrote:
mein code:
Code: Select all
  <?php
da darf nicht einmal ein leerzeichen vor " <?php" stehen!
Nein, weil es sollst als html "interpretiert" wird (eigentlich wirds ja gerade dann nicht interpretiert) und eben zum Browser geschickt. Leerzeichen gilt auch als Ausgabe ;)

@hoergen
Manual wrote:Für diese Anweisung gibt es ein optionales Argument N, das die Anzahl der Verzeichnisebenen bestimmt, über die Ihre Session-Dateien verteilt werden. Wird sie zum Beispiel auf '5;/tmp' gesetzt, kann das das Anlegen einer Session-Datei und Speicherstelle wie /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If bewirken. Um N verwenden zu können, müssen Sie alle diese Verzeichnisse vorher anlegen. In ext/session gibt es für diesen Zweck ein kleines Shell-Script namens mod_files.sh. Beachten Sie, dass die automatische 'Müllentsorgung' (garbage collection) nicht durchgeführt wird, wenn N verwendet wird und größer 0 ist (für weitere Informationen siehe eine Kopie der php.ini). Achten Sie bei der Verwendung von N außerdem darauf, dass Sie session.save_path zwischen Anführungsstriche setzen, weil der Trenner (;) in der php.ini auch für Kommentare benutzt wird.
Würd also eher davon abraten (da N eh standardmässig 0 ist). Zudem ist mir das Format mit 2 Argumenten unbekannt. Wo hast du das her?
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby sari42 » 13. January 2007 13:31

>Zudem ist mir das Format mit 2 Argumenten unbekannt. Wo hast du das her?
siehe php.ini ;)
Code: Select all
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
;     session.save_path = "N;MODE;/path"
unter win reicht:
Code: Select all
session.save_path = "C:\pfad\zum\tmp"

vorausgesetzt es existiert und ist beschreibbar (0;600; ist sowieso default).
sari42
 
Posts: 800
Joined: 27. November 2005 18:28

Postby KingCrunch » 13. January 2007 18:57

Ja, nagut, stand in der deutschen Fassung nicht. Da aber 0;600; eh Standard is, wieso dann angeben?
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby sari42 » 13. January 2007 20:57

KingCrunch wrote:Ja, nagut, stand in der deutschen Fassung nicht. Da aber 0;600; eh Standard is, wieso dann angeben?
tja, das weiß nur "hoergen" ;)
sari42
 
Posts: 800
Joined: 27. November 2005 18:28


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests