PhP Login klappt nur manchmal (selten)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
auftritt
browser
code
datei
datenbank
fehlermeldung
frage
funktionieren
http
kommentar
login
manual
nehmen
problem
session
syntax
url
vorteil
webseite
-
Hallo liebe Community,
ich habe mithilfe eines Tutorials ein PhP Loginscript erstellt,
nur leider klappt der Login nur selten so das ich oft Garnicht eingelogt werde obwohl ich die Meldung bekomme das ich nun eingeloggt bin.
Hier meine Codeschnipsel:
login.php
http://pastebin.com/HHh32amz
passwort.php
http://pastebin.com/RQFtbX8V
Registrieren undsoweiter Funktioniert alles
Hoffe ihr könnt mir weiterhelfen :/
MfG: Wuppi/MyLonky -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
mein-wunschname schrieb:
Wie wär's denn, wenn du mal
session_start();
ganz am Anfag ausführst?
Scheint bis jetzt zu Funktionieren, aber das heißt nichts, ich werde es ne weile testen
EDIT: Problem besteht weiterhin
Beitrag zuletzt geändert: 25.5.2016 9:10:46 von mylonky -
Aktiviere Php Fehlermeldungen und poste die Fehlermeldung im Forum, wenn das Problem wieder auftritt.
-
rocococo schrieb:
Aktiviere Php Fehlermeldungen und poste die Fehlermeldung im Forum, wenn das Problem wieder auftritt.
Habe ich gemacht, ich bekomme nicht eine Fehlermeldung :(
Hier mal die Komplette Loginseite
http://pastebin.com/G0VWerXF
Teten mit Erroranzeige könnt ihr hier
http://moneyclickererror.webspace.rocks/login.php
Logindaten sind:
User: Testi
PW: Test123 -
Vor dem session_start darf keinerlei Ausgabe stattfinden, bei Deiner Login.php steht da aber noch ein HTML Kommentar davor. Also Kommentar entfernen oder erst nach dem Aufruf von session_start ausgeben.
-
Hallo,
erst einmal ist am Anfang der Kommentar in PHP so nicht richtig.
Dann die nächste Frage, nutzt du session_start(); in jeder PHP-Datei am Anfang? Also "index.php", "downloads.php", usw.? Wenn nicht, kann das nicht funktionieren. Ich habe deine Seite mit den Testdaten ausprobiert und auch den Haken gesetzt --- ich muss mich immer wieder erneut einloggen. Es wird auf der Startseite auch nicht angezeigt, dass ich (noch) eingeloggt bin.
-
staymyfriend schrieb:
Hallo,
erst einmal ist am Anfang der Kommentar in PHP so nicht richtig.
Dann die nächste Frage, nutzt du session_start(); in jeder PHP-Datei am Anfang? Also "index.php", "downloads.php", usw.? Wenn nicht, kann das nicht funktionieren. Ich habe deine Seite mit den Testdaten ausprobiert und auch den Haken gesetzt --- ich muss mich immer wieder erneut einloggen. Es wird auf der Startseite auch nicht angezeigt, dass ich (noch) eingeloggt bin.
Ja ich verwende es auf Jeder seite, Das liegt daran das du nicht Eingelogt bist,
solltest du es geschaft haben dich einzuloggen sieht die Startseite so aus:
http://moneyclicker.lima-city.de/Online.png
nur halt mit Testi als Namen -
staymyfriend schrieb:
Ja, der Kommentar ist in PHP nicht gültig, aber es hätte Dir durchaus auffallen können, dass das hier völlig irrelevant ist, da der Kommentar außerhalb des <?php ?> Blocks steht, somit einfach direkt an den Klienten gesendet wird und dort auch ganz normal als HTML Kommentar interpretiert wird. Hättest Du dann noch meinen Beitrag gelesen, wüsstest Du, das genau das das Problem ist: der wird vor session_start gesendet, somit sind die Header auch schon gesendet und session_start kann kein Cookie mehr setzen.
erst einmal ist am Anfang der Kommentar in PHP so nicht richtig.
-
session_start reicht einmal am Anfang jeder Datei aus, die über die URL zu erreichen sein soll. Die ganzen, die mitten drin sind, sind überflüssig.
Den Kommentar am Anfang, also der Lizenzhinweis, besser in den PHP Teil verschieben als Kommentar. Dieser kommt so als HTML vor deinem Doctype zur Ausgabe im Quelltext in den Browser. Es darf nicht mal ein Leerzeichen davor kommen. Also am besten ganz an den Anfang
<?php session_start();
Jetzt kann alles andere kommen.
ist für einen Login eine sehr schlechte Idee, dir das allerdings zu erklären, warum, wäre hier etwas zu lang. Speichere stattdessen die session_id() in der Datenbank und hole diese wieder raus.$_SESSION['userid']
foreach ($pdo->query($sql) as $row) {
Habe ich selbst noch nicht ausprobiert. Bin mir allerdings ziemlich sicher, dass es nicht funktioniert. Du solltest dein Tutorial noch mal durchgehen oder http://kushellig.de/prepared-statements-php-data-objects-pdo/ nochmals lesen. Du darfst stattdessen auch den von mir modifizierten dbhandler aus PHP-Fusion nutzen https://bitbucket.org/Webmeteor24/webmeteor-cms/src/86835f64d757124753f810a8b75eda2e744a0eda/inc/dbhandler.php?at=master&fileviewer=file-view-default Der spart etwas Tipparbeit.
Und noch ein Tipp: speichere deine Dateien immer in UTF-8 ohne BOM ab. So bekommst du dann weniger Umlautprobleme.
-
[quote]controlhu [url=www.lima-city.de/board/action:jump/1164891]schrieb[/url]:
session_start reicht einmal am Anfang jeder Datei aus, die über die URL zu erreichen sein soll. Die ganzen, die mitten drin sind, sind überflüssig.[/quote]
Habe sie Entfernt, und nurnoch Ganz am anfang. Resultat ist Jetzt geht Garnichts mehr xD
[url]http://pastebin.com/BK9udqYz[/url]
EDIT: Habe Vergessen die Datenbank zu Korigieren, Geht alles und der Login macht bis jetzt auch keine Probleme, Danke euch ^^
controlhu schrieb:
[...]
ist für einen Login eine sehr schlechte Idee, dir das allerdings zu erklären, warum, wäre hier etwas zu lang. Speichere stattdessen die session_id() in der Datenbank und hole diese wieder raus.$_SESSION['userid']
und das mach ich wie? (Arbeite zum ersten mal mit PHP und MySQL davor nur mit HTML)
controlhu schrieb:
foreach ($pdo->query($sql) as $row) {
Habe ich selbst noch nicht ausprobiert. Bin mir allerdings ziemlich sicher, dass es nicht funktioniert.
Funktioniert aber oO
Beitrag zuletzt geändert: 26.5.2016 21:39:30 von mylonky -
Einiges hängt natürlich auch von deiner password.php ab.
Ich habe bei jedem User in der Datenbank ein Feld, wo die session_id gespeichert wird.
In der Hauptdatei, die immer geladen wird, Frage ich erstmal, ob diese session_id schon in der DB vorhanden ist, ist sie vorhanden, dann ist der User noch eingeloggt.
Loggt der User sich ein, dann wird erstmal eine neue session_id generiert, und diese wird dann in die DB geschrieben und der user wird eingeloggt. Der Vorteil ist, die session_id gibt es nur einmal und wird generiert wenn der Besucher das erste mal die Webseite besucht. Diese lässt sich also nur schwer manipulieren. Bei dir, wenn du die userid speicherst, dann brauche im Browser nur das Session Cookie für die userid manipulieren und wäre dann eingeloggt. Ich würde dann wahrscheinlich die 1 nehmen und hätte dann deinen Administrator Account und könnte dann mit deiner Webseite machen was ich wollte.
Wie ich gesehen habe, werden bei dir noch zwei andere Cookies erzeugt und gesetzt, hier wäre dann natürlich die Frage, wie diese weiter behandelt werden in deiner password.php. Denn diese beiden Cookies sind ja theoretisch auch einmalig (wäre ein größerer Zufall, wenn zwei User die gleichen Cookies bekämen). Wenn diese für die Überprüfung zuständig sind, ob eingeloggt oder nicht, dann wäre dein Login wieder sicher. Nur eben über die userid alleine wäre es zu unsicher. -
controlhu schrieb:
[...]
Wie ich gesehen habe, werden bei dir noch zwei andere Cookies erzeugt und gesetzt, hier wäre dann natürlich die Frage, wie diese weiter behandelt werden in deiner password.php. Denn diese beiden Cookies sind ja theoretisch auch einmalig (wäre ein größerer Zufall, wenn zwei User die gleichen Cookies bekämen). Wenn diese für die Überprüfung zuständig sind, ob eingeloggt oder nicht, dann wäre dein Login wieder sicher. Nur eben über die userid alleine wäre es zu unsicher.
Genau dazu sind die Ja da, nur mit der id 1 kommt man nicht weit (Bis jetzt habe ich sowieso noch keine Admin Funktionen die nur der Admin kann ^^") -
controlhu schrieb:
Blödsinn, les dir nochmal durch wie PHP Sessions funktionieren, auf Client Seite wird da nur eine zufällige PHP Session ID gespeichert. Alles was in $_SESSION gespeichert wird, liegt aber auf dem Server. Klar, wenn der User die PHP Session ID eines anderen bekommt, könnte er sich als der ausgeben, das nennt sich dann Session Hijacking, ist aber lange nicht so einfach, wie du es hier darstellst.
Loggt der User sich ein, dann wird erstmal eine neue session_id generiert, und diese wird dann in die DB geschrieben und der user wird eingeloggt. Der Vorteil ist, die session_id gibt es nur einmal und wird generiert wenn der Besucher das erste mal die Webseite besucht. Diese lässt sich also nur schwer manipulieren. Bei dir, wenn du die userid speicherst, dann brauche im Browser nur das Session Cookie für die userid manipulieren und wäre dann eingeloggt. Ich würde dann wahrscheinlich die 1 nehmen und hätte dann deinen Administrator Account und könnte dann mit deiner Webseite machen was ich wollte. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage