Sönke Tesch: Sessionvariablen werden nicht gespeichert :(

Beitrag lesen

egal wie ich es auch drehe oder wende, es kommt immer aufs gleiche raus, die variable existiert nicht, ob ich nun mit der funktion session_register() und der normalen variable arbeite, oder ob ich die angeblich seit php4.0 zu bevorzugende methode mit $_SESSION[] verwende.

<?php
  session_name("s_login");

session_name() ist nicht zwingend notwendig.

session_start();
  ?>

$sql_login = 'SELECT benutzername,passwort FROM benutzerdaten WHERE benutzername = "'.$_POST["benutzername"].'"
      AND passwort = "'.$_POST["passwort"].'"';

Daten von "draußen" niemals 1:1 übernehmen. Benutze die Funktion mysql_[real_]escape_string() auf $_POST[..], dafür ist sie da. Ähnliche Problematik etwas weiter unten, dort ist htmlentities() gefragt.

$erg_login = mysql_query($sql_login,$verbindung);

mysql_query() folgt keine richtige Fehlerprüfung, sehr unschön, denn..

if(mysql_num_rows($erg_login)==1)

..wenn mysql_query() doch mal fehlgeschlägt, wundern sich nicht wenige, warum hier ein Fehler kommt (siehe Forumsarchiv, Stichwort "not a valid MySQL result resource"). Siehe auch mysql_error().

{//Login erfolgreich
$sql = 'SELECT anrede,vorname,nachname FROM benutzerdaten   WHERE benutzername = "'.$_POST["benutzername"].'"';

Diese beiden Abfragen kannst Du zusammenfassen:

$rnutzer=mysql_query('select anrede,vorname,nachname from benutzerdaten where benutzername="'.mysql_escape_string($_POST["benutzername"]).'"' and passwort = "'.mysql_escape_string($_POST["passwort"]).'"';
  if ($rnutzer) // mysql_query() ok
    {
     ...

$_SESSION["s_anrede"] = $anrede;
$_SESSION["s_vorname"] = $vorname;
$_SESSION["s_nachname"] = $nachname;

echo 'Willkommen, '.$anrede.' '.$vorname.' '.$nachname;

Wenn Du schon Sessionvariablen anlegst, solltest Du sie auch benutzen. Prinzipiell ist es zwar kein Problem, zweigleisig zu fahren, aber das Speichern von ein und denselben Daten an zwei unabhängigen Positionen birgt einige ärgerliche Stolperfallen.

Außerdem solltest Du Variablen beim Ausgeben immer durch htmlentities() jagen; einzige Ausnahme: Du bist Dir 110%ig sicher, daß die Variable entweder eine Zahl enthält oder frei von den Browser verwirrenden Zeichenketten ist (alles, was ein < enthalten kann, ist gefährlich). Das Argument "Es wird sich schon keiner '<script> while (true) alert("Bla!")</script>' nennen", zählt nicht. Wirklich.

<?php
session_start();
?>

Schau Dir oben nochmal an, ob Du nicht zufälligerweise der Session einen anderen Namen gegeben hast..

noch dazu bin ich auf dem gebiet sessions ein ziemlicher newbie,habe erst gestern damit angefangen.was mich auch noch interressiert, wie denn der ungefähre ablauf einer session aussieht, ich meine zu wissen:

Du weißt richtig, allerdings..

5.session bleibt solange am server erhalten wie es in der php.ini über maxlifetime festgelegt ist

..ist das genauer gesagt die Zeit, in der die Session nicht benutzt worden sein darf, bevor sie gelöscht wird.

ich weiss das sind viele fragen, aber ich habe mich gestern den ganzen tag mühselig durch die aberwitzigsten seiten durchgekämpft um näheres über diese "ominösen" sessions zu erfahren aber man findet fast nirgends eine wirklich gute erklärung zu diesem thema und da kann man dann schon verzweifeln wenn man sich mühselig aus verschiedensten seiten noch so kleine informationen zusammensuchen muss :(

Wahrscheinlich ist die Geschichte zu einfach zum Erklären :)

Gruß,
  soenk.e