-
Also entweder ich bin total bescheuert; aber wenn man dass Script komplett übernimmt und auf formular.php geht funktioniert das ja gar nicht mit der Weiterleitung zu intern.php
Ich habe deswegen das so abgeändert:
Formular(LOGIN SEITE)
LOGIN_CHECKPHP-Code:<?php session_start (); ?>
<?php
if (isset ($_REQUEST["fehler"]))
{
echo "Die Zugangsdaten waren ungültig.";
}
?>
<?php
if( empty ($_POST['Email']) or empty ($_POST['Passwort']))
{
if( $_POST["Kontrolle"] == 1)
{
echo "Die Zugangsdaten waren ungültig.";
}
echo '
<form method="post" action="">
<table>
<tr>
<td>E-Mail Adresse:</td>
<td><input type="text" name="Email" value="'.$_POST['Email'].'" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />
<input type="hidden" name="Kontrolle" id="Kontrolle" value="1"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Registrieren" />
</td>
</tr>
</table>
</form>
';
}
else
{
if ($_POST['submit'])
{
header ("Location: login_check.php");
}
}
?>
InternPHP-Code:<?php
// Session starten
session_start ();
// Datenbankverbindung aufbauen
include 'config.php';
$sql = "SELECT ".
"Id, Vorname, Nachname, Email ".
"FROM ".
"benutzerdaten ".
"WHERE ".
"(Email like '".$_REQUEST["Email"]."') AND ".
"(Passwort = '".md5 ($_REQUEST["Passwort"])."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_nickname"] = $data["Email"];
$_SESSION["user_nachname"] = $data["Nachname"];
$_SESSION["user_vorname"] = $data["Vorname"];
header ("Location: intern.php");
}
else
{
header ("Location: login.php?fehler=1");
}
?>
check_userPHP-Code:<?php
include ("check_user.php");
?>
<html>
<head>
<title>Interne Seite</title>
</head>
<body>
BenutzerId: <?php echo $_SESSION["user_id"]; ?><br>
Nickname: <?php echo $_SESSION["user_nickname"]; ?><br>
Nachname: <?php echo $_SESSION["user_nachname"]; ?><br>
Vorname: <?php echo $_SESSION["user_vorname"]; ?>
<hr>
<a href="logout.php">Ausloggen</a>
</body>
</html>
LogoutPHP-Code:<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: login.php?fehler=1");
}
?>
Mir wird die ganze Zeit angezeigt, dass ich ich die falschen Zugangsdaten angegeben hab. Hab mehrmals neue User erstellt also dadran kann es nicht liegen.PHP-Code:<?php
// Wird ausgeführt um mit der Ausgabe des Headers zu warten.
ob_start ();
session_start ();
session_unset ();
session_destroy ();
header ("Location: login.php");
ob_end_flush ();
?>Geändert von M-P (10.05.09 um 12:47 Uhr)
-
Was sagt denn ein var_dump($_POST); auf der Seite, die den Login prüft?
Sind die Passwörter auch als MD5-Hash in der Tabelle oder im Klartext?Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
-
Das ist aber ein komischer Dump von $_POST :P
Aber ja, da fehlt die Mail.Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
Iich find den Fehler trotzdem nicht. =(
-
mfg
DeluXe
-
jap s.o. (falls ichs richtig gemacht habe)
Ich glaube ich habe den Fehler gefunden aber ich weiß nicht warum er sntsteht:
Ich habe mir mit echo auf der login_check seite mal das PW und Email ausgeben lassen aber da kommt nichts; also wird dass nicht an die Seite weitergegeben aber warum?
Es klappt jetzt; aber nur weil ich den kompletten Code von check_user in die Login.php reinkopiert habe. Aber es muss doch auch möglich sein in 2 Dateien?!Geändert von M-P (10.05.09 um 15:33 Uhr)
-
12.05.09 14:55 #8
Hallo M-P,
ich weiss jetzt nicht genau ob das Problem schon gelöst ist, oder ob ich bei den Posts die schon vorhanden sind, was übersehen habe. Aber das ganze nur überflogen.
Die Sache ist die, wenn du eine Session erstellst und eine neue PHP- Datei aufrufst, muss natürlich auch der neuen PHP - Datei diese übergeben werden. Dazu gibt es grundsätzlich 2 Möglichkeiten.
1. Per URL-Übergabe (Post/Get), Ist aber eher unschön, hat aber den vorteil, wenn variante 2 nicht funktioniert.
2. Über ein Cookie. Dies wird im Regelfall, selber angelegt. Aber wenn im Browser die Sicherheitseinstellung entsprechend hoch sind, halt nicht. Dann kann das zweite Skript nichts von der Session wissen. Ob das Cookie angelegt wird kannst du ja lokal nachgucken.
mfg
AndreEin Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben.
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht haetten.
-
-
Also ich habe ein Login-Script mit Weiterleitung gecoded, aber hab irgend ne Kleinigkeit geändert und ich kann mich nicht mehr einloggen.
LOGIN.php
Intern.phpPHP-Code:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php session_start (); ?>
<?php
if (isset ($_REQUEST["fehler"]))
{
echo '<font color="grey">Die Zugangsdaten sind ungültig.</font><br>' ;
echo '<font color="grey">Bitte noch einmal probieren oder an den'.' <a target="_parent" href="kontakt.php"><font color="#0099CC">Support</font></a> wenden.</font>';
}
?>
<?php
if( empty ($_POST['Email']) or empty ($_POST['Passwort']))
{
if( $_POST["Kontrolle"] == 1)
{
echo '<font color="grey">Beide Felder müssen ausgefüllen werden.</font>';
}
echo '
<form class="clearfix" method="post" action="">
<table>
<tr>
<td><font color="grey">E-Mail:</font></td>
<td><input type="text" name="Email" value="'.$_POST['Email'].'" /></td>
</tr>
<tr>
<td><font color="grey">Passwort:</font></td>
<td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />
<input type="hidden" name="Kontrolle" id="Kontrolle" value="1"/></td>
</tr>
<tr>
<td colspan="1">
<input type="submit" name="submit" value="Log-In" />
</font>
</td>
<td>
<a href="pwvergessen.php"><font color="#0099CC">Passwort vergessen</font></a>
</td>
</tr>
</table>
</form>
';
}
else
{
if ($_POST['submit'])
{
// Session starten
session_start ();
// Datenbankverbindung aufbauen
include 'config.php';
//SQL INJECTION Abwehr
$Email = stripslashes($Email);
$Passwort = stripslashes($Passwort);
$Email = mysql_real_escape_string($Email);
$Passwort = mysql_real_escape_string($Passwort);
$sql = "SELECT ".
"Id, Vorname, Nachname, Email, Anmeldedatum, Person, Lastlogin, Aktivierung".
" FROM ".
"benutzerdaten ".
"WHERE ".
"(Email like '".$_REQUEST["Email"]."') AND ".
"(Passwort = '".md5 ($_REQUEST["Passwort"])."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
if($data["Aktivierung"]==1) ///Ist aufjedenfall auf 1 gesetzt!
{
// Sessionvariablen erstellen und registrieren
$Nachname = utf8_encode($data["Nachname"]);
$Vorname = utf8_encode($data["Vorname"]);
$_SESSION["user_ip"] = $_SERVER['REMOTE_ADDR'];
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_nickname"] = $data["Email"];
$_SESSION["user_nachname"] = $Nachname;
$_SESSION["user_vorname"] = $Vorname;
$_SESSION["user_anmeldedatum"] = $data["Anmeldedatum"];
$_SESSION["user_person"] = $data["Person"];
$_SESSION["user_lastlogin"] = $data["Lastlogin"];
$Lastlogin=date("j.n.Y")." um ".date("H:i:s");
$UPDATELASTLOGIN = "update benutzerdaten set Lastlogin='".$Lastlogin."' where Email='".$_REQUEST["Email"]."'";
mysql_query($UPDATELASTLOGIN);
$_SESSION["user_lastlogin_support"] = $Lastlogin;
header ("Location: weiterleitung.php");
}
else
{
echo "Email muss noch bestätigt werden.";
}
}
else
{
header ("Location: login.php?fehler=1");
}
}
}
?>
check_user.phpPHP-Code:<?php
include ("check_user.php");
?>
<html>
<head>
<title>News</title>
<style type="text/css">
<!--
.Header {
text-align: right;
}
-->
</style>
</head>
<body topmargin="0">
<table width="100%" border="0" cols="0" cellpadding="0" cellspacing="0">
<tr>
<td width="100%"><?php
include ('header.php');
?> </td>
</tr>
<tr>
<td valign="top"><h1 align="center">News</h1>
<p>Weitere Mitarbeiter werden gesucht. </p></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php
include ('footer.php');
?></td>
</tr>
</table>
<p> </p>
<h1 align="center"> </h1>
</body>
</html>
ERLEDIGT geht wieder hab zwei Sessions gestartet;deswegen gings nicht!PHP-Code:<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: login.php?fehler=1");
}
?>
Im Header und Footer ist fast nur HTML drin also liegts dadran nicht.
Ich werde immer von check_user.php auf meine Login-Seite mit Fehler geschickt.
Ich hab die Weiterleitung mit echo $_SESSION["user_id"]); ersetzt und es wird auch keine ID angezeigt?!
Das ist meine verbleibende Frage
Zudem wollte ich fragen ob es unsicher ist sich so einloggen zu können?Könnte man nicht mit einem Cookie Faker z.b. einfach eine user_id erstellen?
Natürlich besser gehts immer aber ich wills natürlich nicht jedem leicht machen!*g*
Geändert von M-P (18.05.09 um 20:16 Uhr)
-
18.05.09 20:15 #11
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Ich finde die Zeile hier verdächtig:
<input type="hidden" name="Kontrolle" id="Kontrolle" value="1" /></td>
Du fragst ja ab, ob der Wert von $_POST['Kontrolle'] == 1 ist, aber das ist er ja immer, also kommt auch jedes mal ein Fehler.
Außerdem würde ich in dieser Zeile, das $_POST['Passwort'] entfernen, da man ein Passwort nie in den Quelltext schreiben sollte:
<td><input type="password" name="Passwort" value="'.$_POST['Passwort'].'" />
// EDIT:
Du brauchst nicht stripslashes() parallel zu mysql_real_escape_string() verwenden:
Code PHP:1 2 3 4
$Email = stripslashes($Email); // Kannst du entfernen $Passwort = stripslashes($Passwort); // Kannst du auch entfernen $Email = mysql_real_escape_string($Email); $Passwort = mysql_real_escape_string($Passwort);
Außerdem solltest du die mit mysql_real_escape_string() behandelten Variablen dann auch in deinem Query nutzen. Und man sollte bei solchen empfindlichen Daten auch kein $_REQUEST[] sondern nur $_POST[] verwenden:
Code PHP:1 2 3 4 5 6 7 8
$sql = "SELECT ". "Id, Vorname, Nachname, Email, Anmeldedatum, Person, Lastlogin, Aktivierung". " FROM ". "benutzerdaten ". "WHERE ". "(Email like '".$_REQUEST["Email"]."') AND ". "(Passwort = '".md5 ($_REQUEST["Passwort"])."')"; $result = mysql_query ($sql);
Und du solltest lieber eine SHA-Verschlüsselung wie z.B. sha1() anstatt von md5() nutzen, da MD5 eher unsicher ist, da dafür genug Rainbow Tabels existierenGeändert von einfach nur crack (18.05.09 um 20:24 Uhr)
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
1. Also $_POST["Kontrolle"] ist erforderlich weil man will ja dass die Nachricht nur kommt wenn auf submit gedrückt worden ist?! So hab ichs zumindest auf irgend ner Seite gelernt, aber vielleicht ist das auch falsch - ich machs mal weg und schau obs noch geht.
Habs ausprobiert. Wenn man Kontrolle wegmacht,dann wird schon direkt beim Aufruf der Seite der "Fehler", dass beide Felder nicht ausgefüllt sind angezeigt.
2. Wie soll ich aber dann dass Passwort abfragen?Geändert von M-P (18.05.09 um 20:23 Uhr)
-
18.05.09 20:30 #13
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Das Passwort fragst du doch per $_POST['Passwort'] ab. Das value=".$_POST['Passwort']." bewirkt, dass das Passwort nach einem Fehler noch in dem Feld eingetragen ist, was bedeutet, dass es unverschlüsselt im Quelltext steht.
Zu deinem $_POST['Kontrolle']-Problem: da musst du den Inhalt von value="" dynamisch erzeugen, z.B. so:
Code PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
if($_POST['Kontrolle'] == 'TRUE') { // Fehler ausgeben } // ... // Formular: if(!isset($_POST['Kontrolle']) { $kontrolle = 'FALSE' } else { $kontrolle = 'TRUE' } echo '<input type="hidden" name="Kontrolle" id="Kontrolle" value="'.$kontrolle.'" />';
Geändert von einfach nur crack (18.05.09 um 20:34 Uhr)
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
-
18.05.09 20:54 #15
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Du könntest z.B. das Passwort in deiner Session speichern und dann jedes mal das letzte eingegebene Passwort aus der Session abfragen, ob es jetzt richtig ist. Damit die Sterne im Passwort-Feld stehen kannst du z.B. das hier nutzen:
Code PHP:1
echo '<input type="password" name="Passwort" value="'.str_repeat(strlen($_SESSION['Passwort']), '*').'" />';
Das bewirkt, dass anstatt des richtigen Passwortes nur Sterne im Quelltext angezeigt werden (und zwar genauso viele, wie Zeichen das Passwort hat). Falls dann das Passwort verändert wurde, überprüfst du einfach, ob es einen Unterschied zwischen dem "Fake" mit den Sternen und der neuen Eingabe gibt.Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
Ähnliche Themen
-
Login System mit Sessions Tutorial Frage
Von Rakaya im Forum PHPAntworten: 1Letzter Beitrag: 02.03.05, 19:27 -
Frage zu Login-System mit Sessions Tut
Von medico im Forum PHPAntworten: 3Letzter Beitrag: 22.10.04, 11:15 -
Login-System mit Sessions Tut-Frage
Von Hanns_L im Forum PHPAntworten: 8Letzter Beitrag: 18.10.04, 23:01 -
Frage zu [PHP/mySQL] Login-System mit Sessions
Von EchseKiuta im Forum PHPAntworten: 9Letzter Beitrag: 01.09.04, 17:41 -
frage zu sessions - login system
Von DieterWeb im Forum PHPAntworten: 1Letzter Beitrag: 28.07.02, 19:45



1Danke

Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren