Antworten auf deine Fragen:
Neues Thema erstellen

Header Location - Problem bei Loginscript

Q

quantumstraight

Guest

Hallo, ich benötige dringend eure Hilfe und hoffe ihr könnt mir helfen.

Hintergrund:
Ich habe einen kleinen Benutzer-Bereich erstellt, mittels Login über Emailadresse und Passwort. Auf der Index-Seite loggt sich der Benutzer ein und wenn beides mit der Datenbank indentisch ist, wird er in den Benutzerbereich weitergeleitet.

Login = index.php
Benutzerseite = nutzer.php

Damit niemand direkt auf die nutzer.php ohne Login kommen kann wird die Emailadresse aus der Datenbank nach erfolgreichem Login in eine Session registriert.

Siehe nachfolgend (nutzer.php) vereinfacht dargestellt:
PHP:
<?php
session_start();
error_reporting(E_ALL);
if(!session_is_registered('semail') || $_SESSION['semail'] == "") {
header("location:index.php");
die;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Login</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="content-script-type" content="text/javascript" />
<meta http-equiv="content-style-type" content="text/css" />
<link rel="stylesheet" type="text/css" href="login-style.css" />
</head>
<body>
<h1>Benutzerbereich</h1>

<p>Sie haben sich erfolgreich eingeloggt!</p>
</body>
</html>
Dieses Script funktioniert auf dem Server meines Hosters einwandfrei.

Nun habe ich das bei einem Freund auf dessen Strato-Server gelegt.

Hier funktioniert zwar der Login einwandfrei, allerdings wird er anstatt auf die nutzer.php immer wieder auf die index.php (Loginseite) zurückgeleitet und es kommt auch keine Fehlermeldung.

Ich vermute also, dass irgendetwas mit meinem Code nicht stimmen muss.

Könntet ihr euch das Bitte einmal anschauen und mir sagen, was da verkehrt sein könnte oder an was dies liegen kann?

Das wäre echt super von Euch.

Ganz liebe Grüße

Quantumstraight
 

Robbyn-

PHP / Flex Programmierer

AW: Header Location - Problem bei Loginscript

Nun wenn du immer wieder auf die index.php zurückgeleitet wirst dann denke ich mal das deine if Bedingung (wenn sie nicht stimmt) einfach auf die index.php zurück geführt wirst. Du solltest ein else nocht mit einfügen damit du da 100% sicher gehen kannst.

Ich weiß kann vielleicht falsch sein, aber ich denke:

PHP:
header("location:index.php");

wird so geschrieben:

PHP:
header("Location:index.php");

Ob das direkten Einfluss hat weiß ich nicht.

MfG.Robbyn
 
Q

quantumstraight

Guest

AW: Header Location - Problem bei Loginscript

Hallo Robbyn, vielen Dank für deinen Hinweise.

Die Änderung der Schreibweise hat nichts geändert:
PHP:
header("Location:index.php");
Aber ich habe mal deinen Hinweis umgesetzt und die Headerabfrage durch eine if else wie nachfolgend ersetzt und die gibt als Ergebnis (Eingeloggt) aus. Heißt also, dass die if-Abfrage funktioniert.

PHP:
<?php
session_start();
error_reporting(E_ALL);
if(!session_is_registered('semail') || $_SESSION['semail'] == "") {
echo "Eingeloggt";
}
else{
echo "Benutzer-Bereich";
}
?>
An was kann es aber dann noch liegen?
 

Duddle

Posting-Frequenz: 14µHz

AW: Header Location - Problem bei Loginscript

Vermutung: PHP: header - Manual

HTTP/1.1 verlangt einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad als Argument von » Location:, aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:
PHP:
<?php
/* Redirect auf eine andere Seite im aktuell angeforderten Verzeichnis */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>


Duddle
 
Q

quantumstraight

Guest

AW: Header Location - Problem bei Loginscript


Danke für deine Hilfe, aber das Problem ist ja nicht das er die index.php nicht findet, sondern dass er den header ausführt, obwohl bei der if-Abfrage die Emailadresse erkannt wird und er dann eigentlich die benutzer.php, in der die Abfrage steht anzeigen soll.

Trotzdem Danke.
 

Duddle

Posting-Frequenz: 14µHz

AW: Header Location - Problem bei Loginscript

Sorry, aber ich bin wohl heute etwas langsam / übermüdet, deshalb bitte ich nochmal um Klärung:
PHP:
if(!session_is_registered('semail') || $_SESSION['semail'] == "") {
echo "Eingeloggt";
}
else{
echo "Benutzer-Bereich";
}

Du willst in "Benutzer-Bereich", kommst aber in "Eingeloggt"? Dann ergibt die if-Abfrage wahr. Also ist mindestens einer der beiden abgefragten Werte wahr.
Was genau ist da jetzt das Problem?


Duddle
 
Q

quantumstraight

Guest

AW: Header Location - Problem bei Loginscript

Damit niemand direkt auf die nutzer.php ohne Login kommen kann wird die Emailadresse aus der Datenbank nach erfolgreichem Login (index.php) in eine Session registriert.

Wenn also jemand ohne sich einzuloggen auf die nutzer.php zugreift, ist dies ja aber nicht der Falll und soll eben auf die index.php zum Login zurückgeleitet werden.

<?php
session_start
();
error_reporting(E_ALL);
if(!
session_is_registered('semail') || $_SESSION['semail'] == "") {
// normalerweise so : header("location: index.php");
echo
"Gehe nach index.php";
}
else{
echo
"Rufe diesen Benutzer-Bereich auf (nutzer.php)";
}
?>
 

exo

Aktives Mitglied

AW: Header Location - Problem bei Loginscript

hmm versuche doch mal die semail direkt nach dem session_start() zu registrieren und nur nach dem inhalt abzufragen und falls die var leer ist dann soll er gleich wieder umleiten oder eben eine fehlermeldung bringen, wobei ich eher für die Fehlermeldung tendieren würde, da gibts dann nicht so ein abruptes ende per DIE....
 
Q

quantumstraight

Guest

AW: Header Location - Problem bei Loginscript

HHIILLFFEE!

Also so langsam zweifle ich nicht mehr an mir oder gar an euch, sondern vielmehr an Strato.

Habe die erhaltenen Hinweise umgesetzt. Diese funktionieren genauso wie mein ursprünglicher Code auf dem Server meines Hosters. Aber nicht - und zwar egal wie - beim Strato-Server (PowerPlus) meines Freundes.

Ich weiß echt nicht mehr, was ich machen soll. Hat jemand eine Idee dazu?

Ich werde jetzt einfach mal den Code der 3 Dateien zum Testen hier einstellen und hoffe, dass einer ne Idee hat, an was dies liegen könnte. Hat einer von euch einen Strato-Webspace?

test-login.php
<?php
session_start();
$semail = "test@test.de";
session_register('semail');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Login</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Body Login-Bereich (test-login.php)</h1>

<p>Diese Session-Variable "semail" (test@test.de) wurde registriert</p>

<p><a href="test-nutzer.php">Weiter zum Benutzerbereich</a></p>

<p><a href="test-logout.php">Logout</a></p>

</body>
</html>
test-nutzer.php
<?php
session_start();
error_reporting(E_ALL);
$email = $_SESSION['semail'];
if ( !(isset($_SESSION['semail'])) || empty($_SESSION['semail'])) {
// normalerweise so : header("location: index.php");
echo "Meldung der Abfrage (if) / Email = $email / Gehe nach index.php";
}
else{
echo "Meldung der Abfrage (else) / Email = $email / Zeige den Benutzer-Bereich";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Bereich</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Body Benutzer-Bereich (test-nutzer.php)</h1>

<p><a href="test-login.php">Zurück zum Login-Bereich</a></p>

<p><a href="test-logout.php">Logout</a></p>
</body>
</html>
test-logout.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Logout</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Logout-Seite (test-logout.php)</h1>
<?php
$semail = $_SESSION['semail'];
if(session_destroy()) {
echo '<p class="center">Bye bye '.$sname.'<br /><br />
Du hast Dich erfolgreich abgemeldet.<br /><br /><a href="test-login.php">Zur
Anmeldung</a></p>';
}else{
echo '<p class="center">Beim Abmelden trat leider ein Fehler auf!
<br /><br />Bitte schliesse Dein Browserfenster.';
}
?>
</body>
</html>
Vielen herzlichen Dank an euch im voraus für eure Mühe.
 

Duddle

Posting-Frequenz: 14µHz

AW: Header Location - Problem bei Loginscript

Okay, lokal ausprobiert: test-login meldet beim ersten Aufruf:
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Beim erneuten Aufruf ist die Meldung weg. Im Text wird auf register_globals verwiesen und Google sagt mir, dass es etwas mit session_register zu tun hat. Dein Code:
PHP:
session_start();
$semail = "test@test.de";
session_register('semail');
Zeile 3: du registrierst den String 'semail' und willst das $semail zuweisen, oder so. Das ähnelt sehr register_globals und es ist lt. auch deprecated, sollte also nicht mehr verwendet werden. Im Handbuch steht auch die bessere Form:
PHP:
// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION["zim"] = "An invader from another planet.";
Das erklärt auch vermutlich, warum es auf manchen deiner Server geht, auf manchen nicht: manche benutzen noch register_globals. Ergo solltest du deinen Code aktualisieren:
PHP:
session_start();
$semail = "test@test.de";
$_SESSION['mail'] = $semail;
mit entsprechender Abfrage:
PHP:
$email = $_SESSION['mail'];
if ( !(isset($_SESSION['mail'])) || empty($_SESSION['mail'])) {
// normalerweise so : header("location: index.php");
echo "Meldung der Abfrage (if) / Email = $email / Gehe nach index.php";
}
else{
echo "Meldung der Abfrage (else) / Email = $email / Zeige den Benutzer-Bereich";
}
Zum Ausloggen benutzt du dann session_destroy() wie du es jetzt schon machst, du könntest aber vorher noch wie im Handbuch vorgeschlagen $_SESSION selbst überschreiben:
PHP:
<h1>Logout-Seite (test-logout.php)</h1>
<?php
$semail = $_SESSION['mail'];

$_SESSION = array();   // <--- session überschreiben

if(session_destroy()) {
echo '<p class="center">Bye bye '.$sname.'<br /><br />
Du hast Dich erfolgreich abgemeldet.<br /><br /><a href="test-login.php">Zur
Anmeldung</a></p>';
}else{
echo '<p class="center">Beim Abmelden trat leider ein Fehler auf!
<br /><br />Bitte schliesse Dein Browserfenster.';
}
?>
Das sollte überall funktionieren.



Duddle
 
Q

quantumstraight

Guest

AW: Header Location - Problem bei Loginscript

Hallo Duddle,
vielen Dank für deine Unterstützung.

Ich habe jetzt das Problem wie folgt gelöst:

test-login.php
<?php
session_start();
// $semail = "test@test.de";
// session_register('semail');
$_SESSION['semail'] = "test@test.de";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Login</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Body Login-Bereich (test-login.php)</h1>
<?php
echo $_SESSION['semail'];
?>
<p>Diese Session-Variable "semail" (test@test.de) wurde registriert</p>

<p><a href="test-nutzer.php">Weiter zum Benutzerbereich</a></p>

<p><a href="test-logout.php">Logout</a></p>

</body>
</html>
test-nutzer.php
<?php
session_start();
error_reporting(E_ALL);
$email = $_SESSION['semail'];
if ( !(isset($_SESSION['semail'])) || empty($_SESSION['semail'])) {
// normalerweise so : header("location: index.php");
echo "Meldung der Abfrage (if) / Email = $email / Gehe nach index.php";
echo $_SESSION['semail'];
}
else{
echo "Meldung der Abfrage (else) / Email = $email / Zeige den Benutzer-Bereich";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Bereich</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Body Benutzer-Bereich (test-nutzer.php)</h1>
<?php
echo $_SESSION['semail'];
?>
<p><a href="test-login.php">Zurück zum Login-Bereich</a></p>

<p><a href="test-logout.php">Logout</a></p>
</body>
</html>
test-logout.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Benutzer-Logout</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Logout-Seite (test-logout.php)</h1>
<?php
$semail = $_SESSION['semail'];
if(session_destroy()) {
echo '<p class="center">Bye bye '.$sname.'<br /><br />
Du hast Dich erfolgreich abgemeldet.<br /><br /><a href="test-login.php">Zur
Anmeldung</a></p>';
}else{
echo '<p class="center">Beim Abmelden trat leider ein Fehler auf!
<br /><br />Bitte schliesse Dein Browserfenster.';
}
?>
</body>
</html>
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben