PDA

Vollstndige Version anzeigen : Probleme mit SessionID


DanielEXQ2
25-05-2004, 18:20
Hi,

ich habe arge Probleme mit Sessions. Ich bin in Sachen Sessions noch unerfahren, da ich Sie noch nicht gebraucht habe. Jetzt ist es aber soweit. Und zwar bentige ich eine Session fr einen Login von Usern. In einer Eingabemaske werden Benutzernamen und Passwort per POST bergeben. Dann erfolgt die Abfrage. Ich poste mal hier den Code:

if ($_POST[Login] == "TRUE")
{
$result = $db->query("SELECT LfdNr, User, Rechte FROM vdb_admin WHERE User = '$_POST[User]' && Passwort = '".md5($_POST[Passwort])."'");
if($db->num_rows($result) == 1 )
{$LoginOk = TRUE; session_start(); session_name("SID");}
}

Man sieht, wenn User und Passwort richtig sind, eine Session gestartet wird. Und hier ist auch schon das Problem! Er erstellt zwar eine SessionID, aber folgende Fehler tauchen mit auf:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by...
und
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent...

Woran liegt das?
Und dann habe ich ein weiteres Problem! bergebe ich die SessionID (SID) per GET mit einem Link, dann ist die Variable $_GET[SID] leer.
Wo liegt dort das Problem?
Bin fr jede hilfe dankbar!

feuervogel
25-05-2004, 19:07
erstens musst du die sid nicht bergeben, dass passiert eigentlich automatisch.

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by...

bedeutet, dass vor

session_start();

bereits etwas an den browser geschickt wurde - per echo oder sonstwie. dies darf nicht sein - nicht mal ein leerzeichen.

meikel
26-05-2004, 02:24
Original geschrieben von feuervogel
erstens musst du die sid nicht bergeben, dass passiert eigentlich automatisch.
Obacht. Das passiert nur dann automatisch, wenn
session.use_cookies = 1
und
session.use_trans_sid = 1
ist. Sonst ist die Session weg, wenn der Client keine Kekse haben will.

DanielEXQ2
26-05-2004, 09:31
also fhre ich session_start() einfach immer am anfang des scriptes aus? Ich habe es probiert und es klappt auch.

Gut, dann das Problem mit der bergabe der Session. Wie meikel schon sagt, ich will es vermeiden, dass die Seite nicht funktioniert, wenn jemand Cookies verweigert. Deshalb gebe ich einfach die SID per Hand mit. Trotzdem habe ich noch ein Problem mit der bergabe! Siehe oben mein text.

Ich starte die Session und benenne die SessionID mit session_name("SID") um. Wenn ich jetzt Prfe ob die $SID != "" ist, FALSE aus. Also ist die $SID = NULL. Warum? Ich denke ich gebe die SessionID mit? Auch mit $_GET[SID] ist die Variable leer...

meikel
26-05-2004, 13:56
Original geschrieben von DanielEXQ2
[ ... richtiges ...]

Ich starte die Session und benenne die SessionID mit session_name("SID") um. Wenn ich jetzt Prfe ob die $SID != "" ist, FALSE aus. Also ist die $SID = NULL. Warum? Ich denke ich gebe die SessionID mit? Auch mit $_GET[SID] ist die Variable leer...
Das ist eine ganz schlechte Idee. PHP erstellt bei session_start() eine Konstante namens SID, folgendes beinhaltet, wenn es erforderlich ist:
session_name().'='.session_id()
Ist die Weitergabe nicht erforderlich, weil der Client den Keks wollte oder session.use_trans_sid = 1 ist, enthlt diese Konstante eine leere Zeichenkette.

Es reicht folgendes:
echo '<a href="index.php?' . SID . '>Das ist ein Link</a>';
oder
echo '<form method="post" action="index.php?' . SID .'>';

Dein Verfahren klappt aus zwei Grnden nicht.
1. RTFM: "Deshalb muss session_name() bei jeder Anfrage aufgerufen werden (und bevor session_start() aufgerufen wurde)."

2. $_GET[SID] ist deshalb falsch, weil SID ja eine existierende Konstante ist. Es mu so aussehen $_GET['SID']

DanielEXQ2
27-05-2004, 08:54
alles klar, hab nen Weg gefunden. Danke