• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Session Problem!

befubo

Mitglied
Hallo miteinander
Folgendes:


login.php
PHP:
<body  bgcolor="#000000"> 
<font  color="#FFFFFF"> 



<form action="login.php" method="post">
Nickname:<br /><input type="text" size="17" name="nick"><br /><br />
Passwort:<br /><input type="password" size="17" name="pw"><br /><br />
<input type="submit" value="OK">
</form>



<?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&uuml;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!";
}
}
}





?>
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 <br>
<a href=home2.php>Weiter</a>";
?>
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();
}
?>

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

befubo
 
Zuletzt bearbeitet:
Werbung:
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.
 
Werbung:
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...

Edit: Quark, würde es nur dann, wenn user nicht gesetzt wäre. Egal, es sollte jedenfalls besser so geschrieben werden. ;)

PHP:
$name = $_GET['user'];

if(!isset($name))

...besser so geschrieben werden sollte:

PHP:
$name = '';

if (isset($_GET['user'])) {
    $name = $_GET['user'];
} else {
    $name = 'Gast';
}

Ist aber hier nicht entscheidend.
 
Zuletzt bearbeitet:
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?
 
Werbung:
also bei home.php spuckt es nichts aus.

bei home2.php allerdings:

Code:
[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:

Code:
$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.';
}

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);
}
?>

wird das ausgegeben:

Code:
[B]Notice[/B]:  Undefined index:  user in [B]/www/herkle.ch/projekt/home2.php[/B] on line [B]8[/B]
Array ( )
 
Werbung:
Zurück
Oben