# PHP Login



## Subwoover (30. Dezember 2001)

Jo ich habe vor kurzem mit PHP angefangen und bin dann eigentlich nach den ersten Variablen Tutorials zu der Frage gekommen:
Wie mache ich einen ganz einfachen Login der aber auch 100% SICHER ist?
Ich dachte zuerst dass ich da einfach ein Mail-send script das ich selbst schrieb nehme und es umgestalte, sodass in 2 Feldern (eines davon Passwortfeld) abgefragt wird, wenn es übereinstimmt mit einer Quelle oder so, dann gelangt man auf eine PHP site mit einem bestimmten Wert, aber wie mache ich das alles ohne MySql? Mein Server unterstützt das leider nicht...
Könnte mir da wer mal das ganze PHP script reinposten damit ich mir das mal anschaun kann?
Greetings


----------



## Feldhofe (30. Dezember 2001)

Man kann sowas genausogut wie mit mySQL auch mit Textdateien machen, dann wird jeweils eine weitere Zeile für jeden Besucher eingetragen, den du dann auslesen kannst.

Wie das genau geht, kann ich dir leider auch nicht sagen, das ist eine Sache in PHP, die mir nun völlig fremd ist...prinzipiell müßte es aber ganz einfach sein, gehen tut es auf jeden Fall!

Vielleicht könnte das ja einmal jemand genauer erklären mit den TXTs?

Gruß
Feldhofe


----------



## g-zus (31. Dezember 2001)

also mit .htacces glaub cih könnte man zugriff einstellen auf die txt-filez (oder war das mit was anderem? ach egal...glaub schon!  )

Dann einfach zwei Textfelder mit Variablen, die werden dann übergeben an ne' PHP-file die die dann aus EINER oder wenn mann will mehreren TXT-Filez ausliest (1 file für alles; 1 File je' User oder 1 File für Passwörter und eine für User <-----letzteres könnte zu problemen kommen!)

Wenn die angegebenen Daten mit den TXT-Filez-Inhalten übereinstimmen kann man rein, ansonsten nicht.
Dann vielleicht noch eine IP-Sperre einbauen (geht glaub ich fast nur mit MySQL; mit TXt-Filez wäre das zuviel arbeit!) wenn man das Passwort öfters falsch eingibt und voila hat man nen' Log-In!

Ich schau mal ob ich sowas hinkrieg und poste es vielleicht.
Aber nicht jetzt...bin saumüde!


----------



## pirate man (31. Dezember 2001)

mit mysql kann ichs dir sagen
in einer tabelle steht der username mit passwort, wenn man die sich dann einloggen will wird in der datenbank geschaut ob alles passt, und wenn ja dann kommt man weiter


----------



## g-zus (31. Dezember 2001)

ja ja, das prinzip is ja immer das selbe (mit kleinen abweichungen vielleicht!), aber der Code dazu ist ihm jetzt ja wichtig.

Und zwar für eine Lösung ohne MySQL!


----------



## Subwoover (31. Dezember 2001)

Jo genau, bruache das ohne Mysql!
Ich fange ja gerade mit PHP an, habe ur wenig ahnung davon und da versteh ich im Moment noch weniger von Mysql 
Bräuchte da mal den Code zum Kopieren, das wär halt gut!


----------



## g-zus (31. Dezember 2001)

So, mal schauen:

Hab jetzt zumindest mal den Anfang geschafft! lol (reine HTML--Arbeit bis jetzt!)

Hab meine Lösung jetzt so gemacht, dass es nicht mit Username oder so funzt, sondern jeder user eine User-ID zugewiesen bekommt.
Is glaub ich leichter!

Also, zuerst erstellst du ne' Datei (login.php) in der die Daten in eine Datenmaske eingegeben werden.
Der Code dazu sieht ungefähr so aus:


```
<form name="login" action="login_check.php" method="post">

<input type="text" name="id" value="ID-Nummer"><br>
<input type="password" name="pass" value="Passwort"><br>
<input type="Submit" value="Los!">

</form>
```



SO, jetzt kommt die Anfrage an die Datei   login_check.php    die die Daten überprüft.


```
<?

//Datei wird ausgelesen und Inhalt in die Variable datei gespeichert

$datei = fopen("$id.txt", "r");

//Datei wird Zeilenweise bis zum Ende ausgelesen

while (!feof($datei)) {
  $zeile = fgets($datei, 1000);
}

//Datei wird geschlossen

fclose($datei);

//Es wird überprüft ob das angegebene Passwort mit dem Passwort (hier die Variable zeile)
//aus der Textdatei übereinstimmt

if ($pass==$zeile) {
  include("loged_in.php");
} else {
  include("error.php");
}

?>
```

Und dann noch die Dateien loged_in.php und error.php (in echt würde ich andere filenamen verwenden, da man sonst auch so auf den Log-InBereich zugreifen kann,w enn man kein Passwort hat; man braucht nur den Namen der datei, die dann angezeigt wird!
kann man aber glaub ich mit .htacces oder so einstellen!)
mit entsprechenden/m Texten/Inhalt erstellen!

ich weiß nicht, ob das funktioniert.
Viellei9cht sind hier und da paar kleine Fehler drin.
Vielleicht kann die jemand verbessern, der sich mit PHP auskennt.
Hab das alles nur so mal zusammengeschnipselt aus anderen Programmiersprachen die ich kenn oder PHP-Scripten die ich auf meiner Platte hab!

Natürlich müsste man noch ein Registrierungsscript schreiben.
Aber bevor ich das mache solltest du das Script hier zuerst mal testen, ob es funzt!


----------



## g-zus (31. Dezember 2001)

*Yepp!*

So, habs jetzt ausprobiert und das Teil funktioniert sogar!
Hätte ich nicht gedacht...lol  

Gut, da es jetzt funzt werd ich mich vielleicht langsam daran machen ein Registrierungsscript zu schreiben!

Ach ja, wer das Script in Funktion sehen will kanns hier ausprobieren:

http://php.kilio.com/aisdarkangel/login.php


----------



## Subwoover (31. Dezember 2001)

Wow kass 
ich werd dass dan auch mal ausprobieren, aber geht das ganze nicht auch mit Username statt ID?


----------



## Subwoover (31. Dezember 2001)

Yeah 
Nur...
ich hab da jez 2 Datein, eine Login.php und eine login_check.php
In der checkdatei ist der PHP code richtig?

Nur wie schreibe ich jez die ID in die txt datei?
zeilenweise???
Kannst da mal sagen wie du das bei deinem Versuch gemacht hast?


----------



## g-zus (31. Dezember 2001)

yo, sorry, hab ich vergessen fertig zu machen.

Also, klar geht das auch mit username.
ich probier das dann auch mal...dürfte nicht viel schwerer sein.

Bei mir sind es (hab ich vergessen zu ergänzen!) 4 Dateien, und dann noch für jeden registrierten User eine EXTRA TXT-File.
Wenn du also 30 registrierte Leute hast, dann sind das 30 TXT-Filez (1.txt bis 30.txt) plus die 4 Grundfilez.

Die 4 Grundfilez sind:

-login.php (hast du schon!)
-login_check.php (hast du auch!)
-error.php (hier schreibst du in ganz normalem HTML oder PHP oder wie du willst rein, dass es einen Fehler gab'! kannst auch noch ein imagefile dazupacken....)

-loged_in.php (hier erscheint der Inhalt, wenn man sich eingeloggt hat! eine memberarea, oder was auch immer...)


Und dann noch zu den Userfilez.
Für User Nr.33 wäre das z.B. eine Textfile die "33.txt" heißen würde und in die einfach nur sein passwort geschrieben wurde.(in die erste zeile, danach keinen Absatz/leere zeile oder sonst was einfügen!)

Bei meinem Beispiel ist es dann eine File "55.txt" in der einfach "logintest" drinsteht.
Kannst ja auch nachschauen; der Link zur File:

http://php.kilio.com/aisdarkangel/55.txt 

Mit Usernames is' es fast genau das gleiche.
Eine Textfile mit dem Namen wie der Benutzer heißt und darin steht sein Passwort.
bei der registrierung is es aber jedoch etwas schwerer, da man vorher überprüfen müsste, ob dieser Benutzername bereits existiert.


----------



## g-zus (31. Dezember 2001)

so, wer sich das Grundgerüst runterladen will:

http://php.kilio.com/aisdarkangel/Login.rar 

Verbesserungstipps sind in der READ_ME.txt-File enthalten...


----------



## dPo2000 (31. Dezember 2001)

mal ne anfängerfrage: wenn ich einen einfachen login haben will... kann ich dann das pw nich einfach als variable deklarieren und mit ner "if" abfrage abfragen ? oder kann man das auslesen !?


----------



## Subwoover (31. Dezember 2001)

Sollte denke ich auch gehen, aber ich bin auch anfänger also weiß ich acuh nicht wie 

Hey frage... statt include nach erfolgreichem Login, kann ich da nicht auch nen Link zu ner Page mit Wert machen?

zB zuner Pag wie 'intern.php?login=true'
Wie mache ich das dann?


----------



## dPo2000 (31. Dezember 2001)

```
if ($password = true (oder was weiß ich *gG+) ) {
print("a href=/"link/">link</a>); }
else {
echo("Ihr Passwort ist inkorrekt !") }
```

so denke ich mal, oder ? *newbiebiN+

:]


----------



## g-zus (1. Januar 2002)

k, also, das mit dem Link geht natürlich auch.
hatte ja auch zuerst einen Link dort, aber dachte mir, warum sollte er sich zuerst einloggen und dann noch auf eienn Link klicken.

bei Seiten wie GMX ist es auch so, dass man sich einnloggt und gleich auf der Hauptpage is' und nicht zuerst ein Link erscheint.
also hab ich das INCLUDE hergenommen.

Is aber deine Sache.....

@dPo2000:
~~~~~~~~

k, hab jetzt zwar deine Frage nicht hundertprozentig verstanden,  aber ich denke du wolltest wissen, ob einfach NUR ein festes Passwort gegeben ist, das für alle User immer dasselbe ist und ob man das wo fest deklarieren/speichern kann. (und ob das halt ne' gefahr birgt!)

Tja, bin mir zwar nicht sicher, aber ich glaube das Script kann so schon von jemandem ausgelesen werden.
aber private Pages sind wohl kaum so wichtig, dass sich da jemand die mühe macht, oder?




@ll:
~~~~

Will den Log-In da oben jetzt etwas erweitern und statt ID's Usernames verwenden.
Dazu will ich halt ein Registrierungsscript schreiben, in dem E-Mail-Adresse, Name, Username und Passwort angegeben werden.
Sollte der Username schon existieren, soll das Script überprüfen ob dieser schon existiert! Wenn ja, soll er das in eienm text ausgeben.

Wie kann ich das genau hinkriegen?
Allgemein gesagt, will ich überprüfen ob eine bestimmte Datei schon existiert oder nicht!


----------



## Subwoover (1. Januar 2002)

Ich habs eh auch mit include 
Dachte das geht nicht in einem bereits includeten aber es funzt.

Ich hab jez eine Page in der ist ein Include da ist ein include und wenn man sich da einloggt kommt man zu einem weiteren include *lol*


----------



## Subwoover (1. Januar 2002)

Achja habe was vergessen...

Wenn man richtigen Username eingibt aber falsches PW kommt man auf die error.php
Wenn man jedoch falschen Username eingibt und richtiges PW, egal oder falsches...
kommt man auf ne Page überfüllt mit Warnings 
Wie mach ich das, dass auch bei falschen Username die error kommt?


----------



## g-zus (1. Januar 2002)

daran arbeite ich noch! lol


----------



## jonathan (1. Januar 2002)

die login_check.php muß so aussehen, das wenn man eine falsche nummer angibt, das er dann auch den login fehler bringt.
übrigens kann man mit der variante auch schon namen angeben und nicht nur nummern.


```
<?

//Datei wird ausgelesen und Inhalt in die Variable datei gespeichert
$dateicheck="$id.txt";
if (file_exists("$dateicheck"))
{
$datei = fopen("$id.txt", "r");

//Datei wird Zeilenweise bis zum Ende ausgelesen

while (!feof($datei)) {
  $zeile = fgets($datei, 1000);
}

//Datei wird geschlossen

fclose($datei);

//Es wird überprüft ob das angegebene Passwort mit dem Passwort (hier die Variable zeile)
//aus der Textdatei übereinstimmt

if ($pass==$zeile) {
  include("loged_in.php");
} else {
  include("error.php");
}

}
else
{
	include("error.php");
}
?>
```


----------



## Subwoover (1. Januar 2002)

Ich habe das jez ausprobiert....
Wenn ich deinen Code verwende jonathan, dann kann ich sogar die richtigen sachen eingeben und komme zur error.php =)


----------



## jonathan (2. Januar 2002)

also bei mir geht alles......

hast du auch alles so wie ich ?


----------



## wo0zy (2. Januar 2002)

leute das is ja schön und gut, aber es is nicht sicher!! solange die pws in txt-files sind kann die jeder sehen der es will! mann muss nur wissen wie die dinger heissen, und ich denke das man das rauskriegen kann!
an eurer stelle würde ich mySQL oder .htaccess nehmen! dann noch was zu dem script! das is nich wirklich gut!! jeder user ne neue txt-datei? wozu?? das kannste alles in eine machen, jeder user zwei neue zeilen!

dann zu der übergabe des pws oder sowas!!

das is genauso unsicher! wenn einer den link kennt kommt er ohne weiteres dahin! das pw müsste übergeben werden, doch wie! es gibt da 2 möglichkeiten!! einmal mit der url! index.php?pw=blubb is aber totaler scheiss da jeder das teil sehen kann!! dann gibs noch die möglichkeit das vorher zu verschlüsseln, doch alles was verschlüsselt ist, kann man auch wieder entschlüsseln!
so, dann is da noch die möglichkeit das gnze mit nem formular zu machen hier der code
	
	
	



```
echo "<form action='index2.php' method='post'><input type='hidden' name='pw' value='".$pw."'><input type=submit value=los</form>";
```
der nachteil liegt aber darin, das jedesmal ein button gedrückt werden muss damit das funzt!! das ganze geht aber auch noch mit sessionids oder so! wie weiss ich leider noch nich! und das is glaub ich das richtige dafür!!

/*/EDIT: schaut ma bei den tutorials nach, da steht wie das mit sessions geht!!


----------



## g-zus (2. Januar 2002)

ja ja.
mysql wollt er aber glaub ich nicht.....und htaccess hatte ich auch vorgeschlagen. habs zwar nie ausprobiert dürfte aber ganz gut funzen!

so. das mit dem fileexists hat dann halt noch gefehlt bei mir.

dass das viele TXT-Filez werden war mir klar, wenn jeder eine neue File bekommt.
aber ich glaube nicht, dass das ein log-in für über 20 Leute wird, und da lässt sich die anzahl noch verkraften!

dass alles in eine file geschrieben wird wolt ich auch machen.
wäre aber dann wieder mehr cod geworden, und dafür war ich bischen zu faul!


----------



## Subwoover (2. Januar 2002)

Was genau ist htaccess?
Jup das ganze wird für maximal 16 Leute 
dafür dass ich erst mit PhP anfange hab ich einiges vor und es ist so unglaublich schwierig


----------



## wo0zy (2. Januar 2002)

also erkären kann ichs nich so genau, damit kannste jedenfalls rechte vergeben und sowas!!

hier steht mehr
http://www.perlunity.de/perl/manual/htaccess_page1.shtml


----------



## A5 Infoschlampe (2. Januar 2002)

woozy hat recht:
um den dauerhaften zustand "eingeloggt oder nicht eingeloggt" zu speichern während man navigiert sollte man session benutzen.

damit kannst du variablen über mehrere requests einfrieren
---
session_start(); // Start
$s_id = session_id(); // Session übergeben

if ($passwort=="OK")
{
// Password korrekt- User als eingeloggt speichern
$loged_in=1;
}
else
{
// Nicht eingeloggt speichern
$loged_in=0;
}

// Speichern in session
session_register("loged_in"); // ohne $-Zeichen
---
bei einem <a href> link übergibst du nun als parameter die variable $s_id, die eine lange nummer enthält. dann kannst du in deinen anderen php-files wieder die variable $loged_in auslesen, und je nach 0 oder 1 entscheiden, ob man eingelogged oder nicht ist.

theoretisch klappts garantiert


----------



## Subwoover (2. Januar 2002)

Emmmm jap den COde htt ich ja dann nur wie bau ich das jez ins gesammte Pagesystem ein?
ODer besser gesagt wo baue ichs ein?


----------



## wo0zy (2. Januar 2002)

also ich hätt da nochma ne frage zu den sessions!!

wie speicher ich da was mit cookies, so das ich beim nächsten visit als eingelogt eingestuft werde??


----------



## g-zus (2. Januar 2002)

Hab ich wo gefunden:
~~~~~~~~~~~~~~~~~~~~



> Cookies
> 
> Als Cookies werden kurze Informationen bezeichnet, die der WWW-Server beim Client (Betrachter) hinterlassen kann. Se sind vor allem beim elektronischen Einkaufen im WWW von Bedeutung, genauer gesagt sind sie immer dann von Bedeutung, wenn der Server weitergehende Information vom Betrachter haben muß, als nur die Internet-Adresse, die eine Seite anfordert.  Cookies bestehen aus folgender Information:
> 
> ...



Ich hoffe es hilft!


----------



## wo0zy (2. Januar 2002)

naja das wusste ich schon, aber ich wollte eigentlich wissen wie das mit sessions ist, ich hab da ma sowas gesehen session.cookie oder sowas? gibs sowas oder muss ich das mit dem "normalen" cookie machen udn dann die sessionid darin speichern oder was??


----------



## g-zus (2. Januar 2002)

session.cookie?

neeeeeeee....glaub ich nicht!
session-id im cookie speichern....kein all zu großes verfallsdatum draufhauen und am anfang aus dem cookie imer die sessionid auslesen lassen, oder so in der richtung!


----------



## Subwoover (3. Januar 2002)

Und wie sieht dann der Code dazu aus?


----------



## g-zus (3. Januar 2002)

steht auf seite 2 dieses Threads!
da speichert man dann einfach die sessionid rein....wie man mit sessions rumhantiert weiß ich noch nicht! musst du einfach mal ausprobieren!


----------



## A5 Infoschlampe (3. Januar 2002)

wo wir grad beim thema sessions sind: kann mir jemand sagen warum mein butterbrot beim vom tischfallen immer auf die butterseite fältt....grrr


----------



## wo0zy (3. Januar 2002)

> _Original geschrieben von A5 Infoschlampe _
> *wo wir grad beim thema sessions sind: kann mir jemand sagen warum mein butterbrot beim vom tischfallen immer auf die butterseite fältt....grrr
> 
> *



hä? was soll das den jetzt??

lol, naja egal, kann mir nu einer die frage beantworten oder nich??


----------



## Karl Förster (4. Januar 2002)

Also die Session-ID würde ich auf keinen Fall in diesem Cookie speichern. Die Daten, die gespeichert werden müssen sind der Benutzername und das Passwort. Wenn Du eine Seite aufrufst passiert folgendes:

Falls Du noch nicht eingeloggt bist, überprüfe ob ein Cookie da ist und hole es in diesem Fall ab. Nehme die Daten aus dem Cookie, versuche den Benutzer mit diesen Daten einzuloggen.

Ich mache das deshalb hier nur theoretisch weil ich sowas noch nicht programmiert habe. Aber das wäre mein Denkansatz.


----------



## wo0zy (4. Januar 2002)

hmm...ok dankeschön!


----------



## erzwo (7. Januar 2002)

*mhhhhh*

ich hab net so wirklich plan in php und hab um so interessierter
diesen beitrag gelesen , was ich noch gern wissen würde:

jetzt muss ich ja username bzw pass fetselegen.
geht es auch, daß das der user machen kann beim ersten login??  

danke fuer jede antwort :smoke:


----------



## jonathan (7. Januar 2002)

nunja...

du kannst ein anmelde script schreiben wo der benutzer dann name und passwort angeben kann... diese daten speicherst du dann in der datenbank...
und dann muß sich der benutzer einloggen, und das wird in die session übergeben.

gruß
jonathan


----------



## g-zus (7. Januar 2002)

WENN man mit sessions programmieren will... 
is aber sicherlich eine der besten lösungen.....außerdem würde ich von der Lösung hier mit TXt-Filez wirklich abraten und MySQL-Tabellen verwenden, da dies wirklich einiiges an Arbeit erspart.

Außerdem ist es auch sicherer....auch wenn .htaccess verwendet werden könnte.


----------



## erzwo (7. Januar 2002)

*achja aber...*

habt ihr dafuer auch ein script???:smoke:


----------



## Subwoover (7. Januar 2002)

Eine Frage noch!
Wo kann ich mich informieren wie ich Mysql datenbanken und tabellen anlege oder kann mir wer erklären wie ich mysql verwende???
zB einfach mal ne datei mit wert und wenn der wert gleich einer ID ist einfahc nen text anzeigen der in ner mysql tabelle steht oder sowas damit ich einfach mal ein einfaches beispiel habe


----------



## jonathan (7. Januar 2002)

hier gibts ne einführung zu php + mysql

http://www.schattenbaum.net/php/


----------



## g-zus (7. Januar 2002)

wofür genau @  erzwo?


für sessions glaub ich is irgendwo ein tutorial glaub ich hier auf der seite, oder?
schau mal irgendwo unter tutorials (gibts den bereich?!?!? lol) oder so! auf jedenfall hab ich wo gelesen, dass es eins geben soll (für sessions!)


----------



## jonathan (8. Januar 2002)

hier :

http://www.tutorials.de/forum/showthread.php?threadid=9684


----------

