Entwickler-Ecke

Off Topic - PHP - session_start()


Delete - Di 28.02.06 18:06
Titel: PHP - session_start()
Hallo,
ich habe in PHP so versucht, eine neue Session zu starten:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
$pw=$_POST['pw'];
$name=$_POST['name'];
$res=mysql_query("SELECT * FROM user WHERE name='".$name."' AND password='".SHA1($pw)."'");
if (mysql_affected_rows()==1) 
{
  session_start();
  echo session_name();
}
  
?>

Ich bekomm aber immer folgende Ausgabe:
Zitat:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /srv/www/htdocs/web123/html/index.php:6) in /srv/www/htdocs/web123/html/adminworks.php on line 7

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /srv/www/htdocs/web123/html/index.php:6) in /srv/www/htdocs/web123/html/adminworks.php on line 7
PHPSESSID

Hat jemand ne Idee? :gruebel:


mkinzler - Di 28.02.06 18:14

Der Fehler sagr, daß schon eine Ausgabe an den Client gemacht wurde; vor dem Header darf keine Ausgabe gemacht werden. In deinem Code-Segment kanne ich auch keine Ausgabe sehen! Ist das der ganze Code oder hat die Seite vorher schon HTML-Code?

Im Notfall kannst du die Output-Bufferung aktivieren.


Delete - Di 28.02.06 18:19

user profile iconmkinzler hat folgendes geschrieben:
Der Fehler sagr, daß schon eine Ausgabe an den Client gemacht wurde; vor dem Header darf keine Ausgabe gemacht werden. In deinem Code-Segment kanne ich auch keine Ausgabe sehen! Ist das der ganze Code oder hat die Seite vorher schon HTML-Code?

Ja hat sie.
Ich hab den Befehl session_start() jetzt ganz oben in die index.php geschrieben und dann kommt der Fehler nicht mehr.
Komisch. Warum ist das so?


jakobwenzel - Di 28.02.06 18:40

user profile iconDahmsi hat folgendes geschrieben:
Warum ist das so?

Das liegt daran, dass beim Session_start Cookies gesendet werden, die immer in den HTTP-Headern stehen. wenn aber schon eine Ausgabe kam, sind die Header schon gesendet und Session_start geht nich mehr.


Phobeus - Di 28.02.06 19:12

Und gleich vorbeugend, weil einem dies die Seele kosten kann, wenn man inlcudes verwendet. Alles nach dem "?> " ist wieder HTML-Code. Klar. Damit ist auch der Leerschritt gemeint, der am Ende ist... Also immer brav achten, dass niemals danach ein Leerschritt steht. Mancher Editor setzt diesen und wenn man mit Sessions arbeitet, kann einem dies in den Rand des Wahnsinns treiben.


Delete - Di 28.02.06 19:15

Was ist ein Leerschritt?
Ich kenn nur Leerzeichen und Leerzeile ;)


Phobeus - Di 28.02.06 20:01

http://de.wikipedia.org/wiki/Leerschritt
Wikipedia hilft weiter. Es handelt sich um ein Synonym zu Leerzeichen und ich bin gerade verwundert, dass dies zu Fragezeichen führt. Gibts nun die erste Generation, die nicht mehr weiß, was eine Schreibmaschine ist? *sg ;)


alcaeus - Mi 01.03.06 13:50

Weiters solltest du nicht mysql_query() schreiben, sondern @mysql_query(). Dies verhindert, dass Fehlermeldungen ausgegeben werden, die wiederum Probleme mit der Session verursachen ;)

Greetz
alcaeus


GTA-Place - Mi 01.03.06 19:13

Ja genau, schön alle Fehlermeldungen unterdrücken.
Wie wollen doch niemand zeigen, was für einen Mist wir gescriptet haben... :roll:


blackbirdXXX - Mi 01.03.06 21:57

omg. @mysql_query ist der typische PHP Weg. Wenn schon PHP, dann bitte schön zuerst mal ein Exception system zurechtlegen. Danke.


alcaeus - Do 02.03.06 10:48

@GTA-Place: es wird empfohlen, die Fehlermeldungen in Scripts auf Produktionsservern komplett zu unterdruecken - nur mal um es so zu sagen.
Weiters, @mysql_query() ist perfekt normal. Ob ich ueber set_error_handler() auf den Fehler reagieren will, oder einfach ueber das Ergebnis von mysql_query() und dann evtl. ueber mysql_error() rausfinden will was los ist, ist dasselbe.

Und ausserdem brauchts in PHP kein Exception-Handling, PHP wirft naemlich keine Exceptions sondern Fehler, Warnungen, Hinweise, usw. ;)

Greetz
alcaeus


kabizolis - Do 02.03.06 11:47

Ups hab gerade gesehen, dass das schon oben behandelt wurde :-P

soweit ich weiss muss
session_start()
immer als erstes in einem dokument vorkommen....
du kannst nicht die session starten, nachdem andere befehle ausgeführt wurden... beginn mit

<?php session_start()
//weitere befehle


Delete - Do 02.03.06 17:14

Das mit dem @mysql_query hab ich zwar jetzt nicht verstanden - ist das nun gut oder nicht? :gruebel:

Ich will nun mit Session-IDs eingeloggte User identifizieren. Wie muss ich da vorgehen. Ich dachte mir, beim Login die SID in die Userdatenbank einzutragen und dann bei jedem neuen Seitenaufruf die aktuelle SID auszulesen, in der DB nachschauen wer die hat - und der ist es dann :-)
Ist das gut so?

Und wann bekommt man eine neue SID zugeteilt?


Grendel - Do 02.03.06 17:58

user profile iconDahmsi hat folgendes geschrieben:
Das mit dem @mysql_query hab ich zwar jetzt nicht verstanden - ist das nun gut oder nicht? :gruebel:

Ich will nun mit Session-IDs eingeloggte User identifizieren. Wie muss ich da vorgehen. Ich dachte mir, beim Login die SID in die Userdatenbank einzutragen und dann bei jedem neuen Seitenaufruf die aktuelle SID auszulesen, in der DB nachschauen wer die hat - und der ist es dann :-)
Ist das gut so?

Und wann bekommt man eine neue SID zugeteilt?


Seit ihr wirklich nicht in der Lage mal in die PHP-Doku zu gucken?!

Hier: http://www.php.net/manual/en/ref.session.php steht doch nun wirklich alles haarklein beschrieben. Auf Deutsch gibt es das ganze bei Bedarf auch: http://www.php.net/manual/de/ref.session.php

Bis neulich ...