frage zu php-login-skript

hi!
habe mir aus diesem forum 'n kleines login-skript (proged by Philip) gezogen.
handelt sich um 'n skript, bei dem nach erfolgreichem login der zugriff auf eine geschützte datei zugelassen werden soll.

code login-formular:

[php]

<?php session_start(); ?> <?php $pw = "e8636ea013e682faf61f56ce1cb1ab5c"; if (md5($_POST[password]) == $pw) { echo "
Zutritt gestattet. Login korrekt.
"; $_SESSION['logged'] = "true"; echo "Klicken Sie hier um fortzufahren."; } else { echo "
Zutritt verweigert.
"; unset($_SESSION['logged']); echo "Versuch doch mal hier rauf zu kommen "; } ?> [/php]

code der geschützten datei

[php]

<?php session_start(); if ($_SESSION['logged'] == "true") { echo "Erfolgreich eingeloggt. Bitte wählen Sie ... bla
"; } else { echo "No access rights given. Please leave the site."; } ?>

[/php]

das skript scheint bei anderen zu funzen (sieht ja auch recht plausibel aus!). ich jedoch werde immer in den else-zweig geleitet (sprich ‚zugriff verweigert‘…) habe den hash-wert natürlich passend zu meinem passwort generieren lassen und im code abgeändert, session wird auch gestartet! wird aber scheinbar nich als solches registriert. weiß mittlerweile echt nich mehr weiter.
hat jemand 'ne idee was da los?

vielen dank im voraus, kekez

Mod-Edit: Code-Tags hinzugefügt - Leute, hört endlich mit dieser Einfärberei auf (XraYSoLo)

  • einrücken
  • keine shorttags verwenden
  • endlich mal mit code-tags arbeiten
  • diese dumme einfärbung lassen

schau’ dir mal folgende zeile an:

[php]
if (md5($_POST[password]) == $pw) {
[/php]

genau, da stimmt was nicht. aber das überlass’ ich jetzt dir.

Nils aka XraYSoLo

hi XraYSoLo,

wollte dich mit der formatierung nich reizen ;)! werde mich was das formatieren angeht bessern schwör!
auch werde ich mir die zeile mal genauer anschauen!

vielen dank, kekez

p.s.: was meinste mit 'dummen einfärbungen?! sämtliche codeschnipsel aus den posts sind doch php-typisch eingefärbt?

Hallo erstmal kekez auf html.de!
Ich willl mal benutzerfreundlich sein und dir die Zeilen, ie Xraysolo schon genannt hat mal verbessern, da es wirklich nur ein kleiner Fehler ist!
Die Syntax einer Superglobalen Variable sieht so aus:
[php]$_POST[‚wert‘][/php] Demnach müsste dein Codeschnipsel so aussehen:
[php]
if (md5($_POST[‚password‘]) == $pw) {[/php] Gruß, Fredmonster!
edit:// und um das ganze noch weiter zu verbessern… Benutze den Code:
[php] <?php session_start(); ?>

<?php if (isset($_POST['submit'])){ $pw = "e8636ea013e682faf61f56ce1cb1ab5c"; if (md5($_POST[password]) == $pw) { echo "
Zutritt gestattet. Login korrekt.
"; $_SESSION['logged'] = "true"; echo "Klicken Sie hier um fortzufahren."; } else { echo "
Zutritt verweigert.
"; unset($_SESSION['logged']); echo "Versuch doch mal hier rauf zu kommen "; } } ?>[/php]

ich meine damit nur, dass php- und html-code hier nicht eingefärbt werden müssen, das machen die code-tags.

und noch was: gereizt haste mich doch net ;-).

Nils aka XraYSoLo

hi Fredmonster,

erstma vielen dank für deine rasche antwort! habe also deine verbesserten code erst studiert und dann ausprobiert(auch wenn ich dein hinweis mit den fehlenden anführungszeichen zuvor schon selbst ausgetestet habe)! und es verläuft wie gehabt. ich werde nach wie vor durch form action=„sec.php“ auf die geschützte seite weitergeleitet, gelange aber innerhalb dieser seite nicht in den if-zweig, der abfragt ob die session ‚geloggt‘ ist weil ich vorher auf der login-seite nich in den if-zweig gelange, der besagt das die session ‚geloggt‘ ist !.. hier noch mal der code, der dem ganzen zugrunde liegt:

[php]

<?php session_start(); ?> <?php if (isset($_POST['submit'])) { $pw = "a3499a19d8be5a24e35d37e0459e62f9"; if (md5($_POST['password']) == $pw) { echo "Zutritt gestattet. Login korrekt."; $_SESSION['logged'] = "true"; echo "Klicken Sie hier um fortzufahren."; } else { echo "Zutritt verweigert"; unset($_SESSION['logged']); echo "Versuch doch mal hier rauf zu kommen"; } } ?>

[/php]
…der code der geschuetzten datei(sec.php) hat sich nich veraendert!!! krieg bald ’ nen anfall.

@ XraYSoLo,

puh, da bin ich erleichtert ^^. wollte es mir nich gleich mit 'nem admin verscherzen :wink:. auch dir besten dank für deine mühe, bzw. hilfe…

schönes woe an alle, kekez

bin ja nur MOD gg.

  1. gibste denn da auch das richtige pw an? denn es richt nicht, wenn du „a3499a19d8be5a24e35d37e0459e62f9“ eingibst, denn das ist das endpasswort, das schon durch die verschlüsselung gegangen ist.

  2. $_SESSION[‚logged‘] musste das „true“ nicht in hochkommata setzen, denn das ist ein operator.

Nils aka XraYSoLo

hi XraYSoLo,
ob mod oder admin, so oder so danke für deine unterstützung!

zu 1. ich lasse mir das klartext passwort bei http://md5-online.de verschlüsseln, um damit meine variable $pw zu deklarieren. im formularfenster gebe ich nach wie vor das klartextpasswort ein, wie es der user auch macht (natürlich als sternchen angezeigt, bzw. type=„password“)

zu 2: habe ich schon vermutet klug daher red und dementsprechend auch aus reiner verzweifelung schon weggelassen, es funzt einfach nich!

wie schon berichtet, ich werde ja auf die ‚gesperrte‘ seite durch form action=„sec.php“ weitergeleitet. aber aufgrund der tatsache, das ich auf der login-seite nich in den if-zweig ($_SESSION[‚logged‘] = true) gelange, bestehe ich auf der gesperrten seite halt auch nich die if-abrage ($_SESSION[‚logged‘] == true). und da liegt evtl. das problem, aber ich habe scheinbar schon den tunnelblick oder checks einfach nich würg

grüße kekez

also es stimmt schon, wie du das gemacht hast…
…jetzt würde mir nur noch eines einfallen: php-version - welche hast du?

Nils aka XraYSoLo

bei mir läuft php version 5.1.1 auf 'nem ‚xampp-server‘ der version 2.1… evtl. is es ja 'ne einstellung von xampp, an der ich drehen muss?! sollte aber meiner meinung nach alles passen (läuft ja ansonsten fast alles rund)…

gutgut, dann war mein gedanke nicht der richtige…
das superglobale array $_SESSION ist ja noch nicht so alt, hätte ja sein können, dass du nicht die aktuellste version hast.

Nils aka XraYSoLo

ja hätte sein können, leider aber nich. kann doch wohl nich wahr sein, dass ich nich auf die lösung komme. es passt doch augenscheinlich alles verzweifel?!

mach’ grad zum spaß eine nagativ-abfrage:

[php]

<?php if(!$_POST['password'] == $pw) { echo 'passwort falsch'; exit(); } else { $_SESSION['logged'] = true; header('location: geschuetzt.php'); } ?>

[/php]

Nils aka XraYSoLo

hi,

habe ich gerade mit folgendem script gemacht:

[php]

<?php session_start(); ?> <?php

if($_POST[‚password‘] != $pw)
{
echo ‚passwort falsch‘;
exit();
}
else
{
$_SESSION[‚logged‘] = true;
header(‚location:sec.php‘);
}
?>
[/php]
kam das übliche ergebnis + 'ne warnung (Cannot modify header information - headers already sent by)

p.s.: habe aus deinem (!$_POST[‚password‘] == $pw) ein ($_POST[‚password‘] != $pw) gemacht!
== ist doch vergleich ob gleich oder…

hoffe ich habe dich richtig verstanden mit deiner negativ-abfrage daumen drück, ciao

Einfach mal die HTML-Ausgabe hinter die Passwort-Abfrage.

dein Problem ist warscheinlich, dass dein Browser keine Cookies aktzeptiert… daher kann er deinen Cookie nicht auslesen… versuchs mal so:
häng mal an deinen Link folgendes an:
[html]<a href="geschuetzt.php?„.session_name().“=„.session_id().“">hier klicken![/html]

Müsste das Problem lösen! Gruß, Fredmonster!

hi fredmonster,
um ‚an-ein-ander-vorbei-redung‘ zu vermeiden poste ich nochma deinen von mir umgesetzten lösungsvorschlag:

login-script:
[php]

<?php session_start(); ?> <?php if (isset($_POST['submit'])) { $pw = "f561aaf6ef0bf14d4208bb46a4ccb3ad"; if (md5($_POST['password']) == $pw) { echo 'Zutritt gestattet. Login korrekt.'; $_SESSION['logged'] = true; echo'Klicken Sie hier klicken!'; } else { echo 'Zutritt verweigert'; unset($_SESSION['logged']); echo 'Versuch doch mal hier klicken!'; } } ?>

[/php]
[U]geschuetzte-datei-script:

[/U][php]

<?php session_start(); if ($_SESSION['logged'] == true) { echo 'Erfolgreich eingeloggt. Bitte wählen Sie ... bla
'; } else { echo 'No access rights given. Please leave the site.'; } ?>

[/php]
vielleicht habe ich 'nen denkfehler drinnen(grundsätzlicher aufbau des formulars, bzw. der abfragen? also mal klartext:

  1. auf der loginseite(login.php), die das login-formular beinhaltet, muss der user ein von mir als md5 verschlüsseltes und innerhalb der datei login.php als solch deklariertes passwort eingeben.
  2. gibt der user ein passwort ein wird er durch form action=„sec.php“ zur datei(sec.php) weitergeleitet.
  3. hat der user das richtige passwort eingegeben, so bekommt er den inhalt der seite zu sehen.
  4. hat der user das falsche passwort eingegeben gelangt er ebenfalls zur seite sec.php, darf aber aufgrund des falschen passworts den inhalt nich sehen, sondern bekommt 'ne ausgabe von z.B. ‚falsches passwort bla, bla, bla…‘ und die möglichkeit, es erneut zu versuchen!

ich sehe in meinem tmp-ordner von xampp, das die session gestartet wird, jedoch wird sie aus irgendeinem grund nicht ‚geloggt‘, so dass ich die abfrage auf der seite sec.php nich bestehe…

irgendwo is der wurm drin…

vielen dank für eure hilfe, kekez

p.s.: die ausgaben und die damit verbundenen verlinkungen innerhalb der if-abfragen auf der login-seite bräuchte ich also gar nicht, richtig?!

Hallo… Fehler gefunden:
erstmal das Script:
[php]<?php
session_start();

$pw = "f561aaf6ef0bf14d4208bb46a4ccb3ad";

if(isset($_POST[‚submit‘])){
if (md5($_POST[‚password‘]) == $pw)
{
echo ‚Zutritt gestattet. Login korrekt.‘;
$_SESSION[‚logged‘] = true;
echo’Klicken Sie <a href=„sec.php?“.session_name()
.„=“.session_id().„">hier klicken!';
}
else
{
echo ‚Zutritt verweigert‘;
unset($_SESSION[‚logged‘]);
echo 'Versuch doch mal <a href=„sec.php?“.session_name()
.“=„.session_id().“">hier klicken!';
}
}
?>

[/php] Dann die Erklärung: [B]Du hast die Datei auf die sec.php verlinkt... auf der sec.php hast du allerdings die session noch nicht geloggt gehabt.. also musst du den auf die selbe Datei verlinken, da du auf ihr die Session loggst.. Hoffe ich konnte dir helfen und du hast es verstanden..

[/B]Gruß, Fredmonster!

hi fredmonster,

yipiee, es funzt!!! herzlichen dank für den hinweis. ich frage mich nur, warum das nich geklappt hat, als ich es gestern schon eine-million-mal so versucht habe. warum es erst heute aufgrund deines ansatzes 100%tig geklappt hat, keine ahnung?! vermutlich da ich gestern noch das formular-tag vor dem eigentlichen php-tag habe abarbeiten lassen… übrigens: warum die sessions gestern die ganze zeit nich ‚geloggt‘ wurden, hatte ich selbst 'rausgefunden '(die eigentlich seit hundert jahren aktivierten cookies in meinem firefox waren auf einmal deaktiviert :?:)!
jedenfalls besten dank an dich und die community, super nettes und hilfsbereites forum hier lob verteil und weiterempfehl
:wink:!

bis denne, kekez