Veröffentlicht 26. November 200321 j Hallo zusammen, ich bin gerade dabei, eine Session samt Variablen in einen Loginvorgang einzubauen. Ein Teil des Quellcodes sieht folgendermaßen aus: session_start(); //Setzen der Sessionvariablen $_SESSION["userid"] = $userid; $_SESSION["Vorname"] = $Vorname; $_SESSION["Nachname"] = $Nachname; Aber irgendwie läuft das ganze nicht... Bekomme immer folgende Fehlermeldungen: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\wamp\htdocs\benutzerverwaltung\index.php:2) in c:\wamp\htdocs\benutzerverwaltung\login\check.php on line 81 Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0 Zur Entwicklungsumgebung: - Apache 1.3 - WinMySQLAdmin 1.4 - PHP 3 Liegt es vielleicht an meiner PHP-Version? - Aber das muss doch auch so gehen, oder? : Bin für jede Hilfe dankbar! Gruß, Jusky
26. November 200321 j Hallo! Hast du irgendwelche ausgaben oder sonstiges vor session_start()? Gruß Azrael
26. November 200321 j Nun ja, bevor ich die Session initialisiere, mache ich erst einmal eine DB-Abfrage, ob der User vorhanden ist, etc. Ist das der Fall, ziehe ich mir die Daten aus den Tabellen und schreibe sie in die Variablen, die ich der Session anschließend übergebe. - Alles in ein und demselben Skript. Ist das denn so verkehrt? :confused:
26. November 200321 j nein das nicht aber jegliche ausgaben auch sowas wie: <html> .... <?php session_start(); ?> </html> darf nicht vorkommen!
26. November 200321 j Solche Ausgaben habe ich aber nicht... Bevor ich session_start() aufrufe, überprüfe ich lediglich, ob der User existiert und wenn ja, dann ziehe ich die Daten aus den Tabellen... Mehr ist da nicht... Hm, was kann denn sonst noch ein Fehler sein??? Nachtrag: Habe mich etwas bei der Entw.umgebung vertan: Das ganze läuft unter PHP 4.3.1.
26. November 200321 j hmm... wenn du PHP Vs. 3 hast solltest du vielleicht anstatt $_SESSION $HTTP_SESSION_VARS verwenden... oder du machst ein Update auf PHP4 oder PHP5
26. November 200321 j Also, mein Skript (check.php) sieht erst einmal folgendermaßen aus: <?php //Übergabe der POST-Variablen $userid = $_POST["userid"]; $Pwd = $_POST["login_pwd"]; //Datenbankverbindung wird aufgebaut ... //Prüfung, ob User existiert ... if ($anzahl == 0) { include "login_fehler.php"; } else { while ($row = mysql_fetch_array($result)) { $ID = $row["ID"]; } //Passwort wird verschlüsselt $Passwort = md5($Pwd); $check_user = mysql_query("Select * from benutzer_details where User_ID = \"" . $userid . "\" and Passwort = \"" . $Passwort . "\";"); $number = mysql_num_rows($check_user); mysql_free_result($check_user); if ($anzahl == 0) { include "login_fehler.php"; } else { //Die Daten des Benutzers werden aus der MySQL-DB ausgelesen $daten = mysql_query("Select * from benutzer_tbl where User_ID = \"" . $userid . "\";"); while ($row = mysql_fetch_array($daten)) { $Vorname = $row["Vorname"]; $Nachname = $row["Nachname"]; } mysql_free_result($daten); //Session wird initialisiert session_start(); //Setzen der Sessionvariablen $_SESSION['userid'] = $userid; $_SESSION['Vorname'] = $Vorname; $_SESSION['Nachname'] = $Nachname; } } mysql_free_result($result); mysql_close(); ?>
26. November 200321 j Ja, aber wenn ich die includes auskommentiere, funktioniert es immer noch nicht... Edit: Ok... das lag dann wohl doch nicht daran... Menno, ist das denn so schwer oder sehe ich den Wald vor Bäumen nicht...
26. November 200321 j Hi Jusky hast du irgendwelche Leerzeichen vor dem php initialize tag? Ansonsten versuch mal die session als aller erstes zu starten. Ich glaub mal irgendwo gelesen zu haben das es das erste is was du machen mußt. Und wo das session_start im endeffeckt in deinem SourceCode steht beeinflußt dein Programm ja nicht.
26. November 200321 j <?php //Übergabe der POST-Variablen $userid = $_POST["userid"]; $Pwd = $_POST["login_pwd"]; //Datenbankverbindung wird aufgebaut ... //Prüfung, ob User existiert ... if ($anzahl == 0) { include "login_fehler.php"; } else { while ($row = mysql_fetch_array($result)) { $ID = $row["ID"]; } //Passwort wird verschlüsselt $Passwort = md5($Pwd); $check_user = mysql_query("Select * from benutzer_details where User_ID = \"" . $userid . "\" and Passwort = \"" . $Passwort . "\";"); $number = mysql_num_rows($check_user); mysql_free_result($check_user); if ($anzahl == 0) // <- hier ist auch ein denkfehler!! oben prüftst du ab ob anzahl == 0 ist und im elsezweig //dieser abfrage fragst du es erneut ab obwohl die anzahl hier ja durch die abfrage am anfang nie diesen wert annehmen kann { include "login_fehler.php"; } else { //Die Daten des Benutzers werden aus der MySQL-DB ausgelesen $daten = mysql_query("Select * from benutzer_tbl where User_ID = \"" . $userid . "\";"); while ($row = mysql_fetch_array($daten)) { $Vorname = $row["Vorname"]; $Nachname = $row["Nachname"]; } mysql_free_result($daten); //Session wird initialisiert session_start(); //Setzen der Sessionvariablen $_SESSION['userid'] = $userid; $_SESSION['Vorname'] = $Vorname; $_SESSION['Nachname'] = $Nachname; } } mysql_free_result($result); mysql_close(); ?> [/PHP]
26. November 200321 j @A.Z.R.A.E.L. Ich hatte mich oben noch einmal korrigiert: Habe die Version 4.3.1... @MightyCats Leerzeichen habe ich keine und die Idee, das session_start an den Anfang zu setzen, hat leider auch nicht funktioniert... *langsam verzweifel*
26. November 200321 j ich denk eher das issn schreibfehler, anzahl soll an dieser stelle wohl number sein
26. November 200321 j Ich kann dir eins anbieten, das wenn mir mal deine php datei schickst ich sie hier mal durch den apache jag Meistens sinds immer so FU fehler die sich irgendwo verstecken und einem den letzten nerv rauben :/ EDIT: Ok, Jaraz hat recht, steht sogar noch breit oben dran output started @ index.php on line 2 Ich sag ja, immer diese versteckten Fehler ^^
26. November 200321 j AHHH du rufst die Datei ebenfalls über ein include auf und in der index.php ist vorher eine Ausgabe. (Was auch genau so in der Fehlermeldung steht.) Gruß Jaraz
26. November 200321 j Ja, ich habe eine index.php, von der aus ich das Menü aufrufe... Im Menü selbst ist dann die login.php includet, die sich dann beim Einloggen auf die check.php bezieht. Aber wie sollte ich das denn sonst lösen? Irgendwie muss ich doch die Dateien einbinden... Sorry, aber ich bin erst seit 3 Wochen an PHP dran...
26. November 200321 j Habe jetzt das start_session an den Anfang der index.php gesetzt. Ich bekomme aber immer noch die Fehlermeldung: Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
26. November 200321 j Ok, werde die Sessionbehandlung erst einmal nur in das einzelne Modul einbauen... Über die Zusammenfügung aller Elemente und die daraus resultierenden Fehler kann man sich später noch den Kopf zerbrechen... Danke erst einmal...
26. November 200321 j Hm, also irgendwie hat PHP was gegen mich... Habe jetzt das login-Skript (mit der Eingabemaske) einzeln aufgerufen und per <form action="check.php" method="POST"> die Variablen an das nächste Skript übergeben. Dort wird am Anfang die Session gestartet. Tja, aber der Fehler ist auch hier der gleiche wie oben...
26. November 200321 j Ok, habe mich jetzt mal umgehört und die Meldung ist wohl nicht so wichtig... Na ja, lass ich sie eben mal außer Acht... Danke nochmals für eure Mühe! Ist schon schwer, sich in die neue Thematik reinzudenken... LG, Jusky
26. November 200321 j Original geschrieben von Jusky Ok, habe mich jetzt mal umgehört und die Meldung ist wohl nicht so wichtig... Na ja, lass ich sie eben mal außer Acht... LG, Jusky das ist aber nicht dein ernst oder`? wenn der sagt das fehler bei den sessions sind, dann wirst du auf der nächsten seite nicht mit deinen werten und variablen aus der session arbeiten können, da diese ja dann nicht gespeichert wurden!!
26. November 200321 j editier mal die php.ini in c:/apache/php (bei nem windows system ^^ bei Linux weiß ich nimmer genau wo er die hinschreibt) ; You should do your best to write your scripts so that they do not require ; register_globals to be on; Using form variables as globals can easily lead ; to possible security problems, if the code is not very well thought of. register_globals = On statt ; You should do your best to write your scripts so that they do not require ; register_globals to be on; Using form variables as globals can easily lead ; to possible security problems, if the code is not very well thought of. register_globals = Off Ansonsten weiß ich auch nicht mehr weiter, aber laut fehler text sollte dann das behoben sein. Alternativ Lösung is das ganze über Cookies zu lösen.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.