Session Problem!

Hallo miteinander
Folgendes:

login.php
[PHP]

Nickname:


Passwort:


<?php if(isset($_POST["nick"])) { mysql_connect("localhost", "XXX","XX") or die ("Keine Verbindung moeglich"); mysql_select_db("dbHerkle") or die ("Die Datenbank existiert nicht"); $nick = $_POST["nick"]; $pw = $_POST["pw"]; $abfrage = "SELECT nick FROM user WHERE nick = '$nick'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $user = $row->nick; } if($user == "") { echo "Ungültiger Username!"; } else { $abfrage = "SELECT pw FROM user WHERE nick = '$nick'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $pass = $row->pw; } if($pw == $pass) { Header("Location: home.php?user=$nick"); exit(); } else { echo "wrong pass!"; } } } ?>

[/PHP]home.php
[PHP]

<?php session_start(); //Ganz wichtig $name = $_GET['user']; if(!isset($name)) { $name = "Gast"; } //Session registieren $_SESSION['user'] = $name; //Text ausgeben echo "Hallo $name
Weiter"; ?>

[/PHP]home2.php
[PHP]

<?php session_start(); //Ganz wichtig //In $name den Wert der Session speichern $name = $_SESSION['user']; if($name == "befubo") { echo "Willkommen"; } else { Header("Location: login.php"); exit(); } ?>

[/PHP]

Jetzt ist mein Problem das:
Es leitet mich IMMER Automatisch auf die LoginSeite. Wieso passiert das?
thx und mfg

befubo

In home.php steht korrekt „Hallo befubo“?

Dein Code ist an mehreren Stellen unsicher.

  • Der SQL-Code ist anfällig für Injections, escape Benutzereingaben.
  • Mit einem direkten Aufruf von home.php?user=befubo ließe sich der Login vermutlich komplett umgehen.

Zudem könntest du

  • die beiden SQL-Abfragen zu einer zusammenfassen und
  • die Session bereits in login.php setzen.

hi
danke für die Antwort.

In home.php steht korrekt „Hallo befubo“?

Ja, wird korrekt angezeigt…

  • Mit einem direkten Aufruf von home.php?user=befubo ließe sich der Login vermutlich komplett umgehen.

Jup, das weiss ich, aber es geht mir hier eig. nur um die Sessions…

Tja, das sieht ansonsten an der Stelle korrekt aus. Das mit der $_SESSION ist so eigentlich richtig.

Nimm mal den header() aus home2.php raus und setze oben ein print_r($_SESSION); rein, um zu gucken, was in der Session steht.

Insgesamt immer hilfreich beim Debuggen:

error_reporting(E_ALL | E_STRICT);

…zu Beginn einer Datei, um PHP kleinlich alle Fehler und Unschönheiten anzeigen zu lassen. Ansonsten per echo und print_r die Variablen zu sinnvollen Zeitpunkten ausgeben lassen.

Nebenbei: Striktes error reporting würde etwa darauf hinweisen, dass das hier…

[color=„red“]Edit: Quark, würde es nur dann, wenn user nicht gesetzt wäre. Egal, es sollte jedenfalls besser so geschrieben werden. :wink:

[php]$name = $_GET[‚user‘];

if(!isset($name))[/php]

…besser so geschrieben werden sollte:

[php]$name = ‚‘;

if (isset($_GET[‚user‘])) {
$name = $_GET[‚user‘];
} else {
$name = ‚Gast‘;
}[/php]

Ist aber hier nicht entscheidend.

Hmm, komisch. Wenn ich den Header austausche und die Session ausgebe, kommt das:

Array ( )

und sonst nichts. Kann das vieleicht am sever liegen, dass der keine sessions unterstützt?

Pack mal das error_reporting(E_ALL | E_STRICT); als ersten Befehl in home.php, vielleicht spuckt es was aus.

also bei home.php spuckt es nichts aus.

bei home2.php allerdings:

[B]Notice[/B]:  Undefined index:  user in [B]/www/herkle.ch/projekt/home2.php[/B] on line [B]6[/B]

das währe das hier:

$name = $_SESSION['user'];

Ich sehe gerade, dass session_start() einen Rückgabewert hat.

Wird das hier ausgegeben?

[php]<?php
if (!session_start()) {
echo ‚Session konnte nicht gestartet werden.‘;
}[/php]

Falls ja, ist es wohl eine Servereinstellung. Ist mir in der Form noch nicht begegnet. (Frag im Zweifel einfach mal auf phpforum.de oder php.de nach – oder warte natürlich hier weitere Antworten ab --, wenn dich das nicht weiterbringt. Oder wirf einen Blick in die Doku. Ohne testen zu können, habe ich keine Ideen mehr.)

es wird nichts ausgegeben.

also bei dem Script:

[PHP]<?php
error_reporting(E_ALL | E_STRICT);
if (!session_start()) {
echo ‚Session konnte nicht gestartet werden.‘;
}

//In $name den Wert der Session speichern
$name = $_SESSION[‚user‘];

if($name == „befubo“)
{
echo „Willkommen“;
}
else
{
print_r($_SESSION);
}
?>[/PHP]

wird das ausgegeben:

[B]Notice[/B]: Undefined index: user in [B]/www/herkle.ch/projekt/home2.php[/B] on line [B]8[/B] Array ( )