IP-Problem bei Anmeldung mit 2 verschiedenen PCs
lima-city → Forum → Die eigene Homepage → Homepage Allgemein
adresse
anfang
aussage
benutzer
code
datei
datenbank
einloggen
erstellen
frage
fragestellung
glauben
login
minute
realisieren
session
speichern
speicherung
tun
zeile
-
Ich habe ein Problem, und zwar habe ich eine Homepage mit Login erstellt. Um eingeloggt zu bleiben wird natürlich die IP-Adresse
gespeichert. Das funktioniert auch einwandfrei, solange sich nicht 2 Personen von 2 PCs gleichzeitig aus ihrem "Heimnetzwerk" anmelden, was ja auch geht. Dann kann sich also immer nur EINER einloggen, weil ja nur EINEM die aktuelle IP-Adresse zugeordnet werden kann. Ich habe schon versucht den Computernamen mit PHP auszulesen und anhand
dessen zu differenzieren um sich gleichzeitig von der selben IP einzuloggen. Leider kam dabei immer die Name des IP-Netzknotens (glaube ich) raus, der wieder genauso gleich ist wie die IPs.
Habt ihr einen Tipp oder eine Lösung (PHP)?
Hab schon einiges probiert - leider aber ohne Erfolg.
Vielen Dank für euere Hilfe. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich glaube dafür benötigst du dann Cookies.
Hab aber noch nicht damit gearbeitet und kenn mich folglich damit auch nicht aus. -
Nimm einfach eine Session. Das ist am einfachsten. Da kümmert sich der Server um die Sache mit der IP und so.
PS: Mit der IP war ja klar weil PHP serverseitig ist. Also nimmt der die IP von dem Gerät, was die Seite angefordert hat und das ist i.d.R. der Router/Proxy. -
Das kannnst du einfach realisieren, und dabei auchnoch ein Tool für Benutzer erstellen. Hab ich schon selbstgemacht:
Du musst einfach eine Tabelle anlegen, die nennst du 'online'. Darin speicherst du Die IP-Adresse des benutzers, den Username, und Das Timestamp+5 Minuten. Auf jeder Seite wird das Timestamp erneuert, und 5 Minuten drauf gerechnet. Wenn man mer als 5 Minuten nichts macht ist man automatisch ausgeloggt. Wenn man auf 'ausloggen' klickt, wird als Timestamp einfach '1' in die Tabellenspalte geschrieben. Auf jeder Seite kontrollierst du dann einfach, ob das Timestamp in der Tabellenspalte (sind ja 5 Minuten mehr) größer ist, als das aktuelle. Wenn ja ist man eingeloggt, ansonsten nicht. Und wenn die IP-Adresse garnicht eingetragen ist ist man natürlich auch nicht eingeloggt.
Für deine Benutzer kannst du mithilfe dieser Tablle recht einfach ein User-Online Script erstellen:
Du machst einfach eine Schleife, die alle Timestamps nacheinander durchschaut. Wenn das Timestamp, das gerade angeschaut wird im gültigen Bereich liegt, dann wird der Benutzername ausgegeben.
-
Also, das passt meiner Ansicht nach nicht zusammen, IP-Speicherung beim Login UND die Erlaubnis, sich zweimal einzuloggen. Der normale Weg, um dauerhaften Login zu ermöglichen ist wie gesagt Session, das geht dann ca. so, dass du am Anfang jeder PHP-Datei (oder in eine extra-Datei, die in jeder anderen Datei included wird) etwas wie das folgende schreibst (nur recht grob):
<?php session_start(); $username = $_SESSION['username']; ?>
Im Loginscript machst du dann noch:
<?php session_start(); $_SESSION['username'] = $username; ?>
Das ist nur sehr einfach, du musst eigentlich noch ne Menge beachten, z.B. dass für Leute, die keine Cookies haben, an jeden Link die Session-ID angehängt wird und in jedem Formular die Session-ID mit übertragen wird. Google sonst einfach mal nach "Tutorial PHP Session", da findest du sicherlich was.
IP speichern würde man dann höchstens noch machen, um zu verhindern, dass sich die gleiche Person mit zwei verschiedenen Accounts gleichzeitig einloggt. Um es zum login zu benutzen ist das sinnlos, weil damit nämlich auch gleichzeitig jeder, der mit der gleichen IP surft (also die ganze Familie) freien Zugang zu dem Account hat. Im Regelfall ist das ein unerwünschtes Verhalten.
@my-selfmade: Das ist ja wohl der größte Blödsinn, du solltest die Frage nochmal lesen, er fragte nicht, wie er es realisieren kann, die IP des Benutzers zu speichern, oder einen automatischen Login zu machen, er fragte, wie er es realisieren kann, dass sich zwei Leute mit gleicher IP einloggen... -
Vielen Dank für euere schnelle und umfangreiche Hilfe.
Muss ich dann also immer beim Login den Usernamen in die Session übernehmen und dann immer an die nächste Seite übergeben?
Einen Weg das ich die Session jetzt noch irgendwie nachträglich einbaue (so als Zusatz
hinter die IP angehangen) geht also nicht? Sonst muss ich ja alle Seiten nochmal neu machen
Oder kann man die Session-ID auch irgendwie beim Login in die DB schreiben?
Wenn also ein Nutzer keine Cookies aktiviert hat funktioniert das ganze nicht?
Gibts also keinen Ausweg dann? Werd mich dann mal über dieses Tutorial erkundigen!
Vielen Dank nochmal.
MfG
Beitrag geändert: 25.8.2008 14:30:48 von zocca
Beitrag geändert: 25.8.2008 14:32:45 von zocca -
@Merovius: Das war nur ein Beispiel, aus den 5 Minuten kann man natürlich auch 5 Jahre machen.
-
Vielen Dank für euere schnelle und umfangreiche Hilfe.
Muss ich dann also immer beim Login den Usernamen in die Session übernehmen und dann immer an die nächste Seite übergeben?
Nein. Du musst nur am Anfang halt diese zwei Zeilen einfügen. Sollte nichts anderes sein, als die IP zu ermitteln und nachzuschauen, ob der schon angemeldet ist, sollte eher noch viel schneller gehen, mit nur zwei kleinen Zeilen.
Die Session läuft so: Beim Client wird ein Cookie mit der Session-ID gesetzt. Diese ID überträgt er bei jedem Seitenaufruf. Wenn du nun session_start() aufrufst, schaut PHP, ob ein solcher Cookie gesetzt wurde und wenn ja, schaut der in einer internen Datei nach, in der sind dann Variablen dafür gespeichert und überträgt diese Variablen in das $_SESSION Array. Und wenn du Variablen da einträgst, werden die von PHP automatisch in einer Datei gespeichert. Du hast also minimalen Aufwand. Du musst nur session_start aufrufen und hast damit die Möglichkeit, quasi unbegrenzt variablen zu speichern, die vollkommen automatisch so gespeichert werden, dass du bei einem Aufruf anderer Seiten wieder darauf zugreifen kannst. Wie gesagt, Google mal nach Sessions, da findest du sicher viele besser Erklärungen. Sessions sind auf jeden Fall das Mittel der Wahl.
Einen Weg das ich die Session jetzt noch irgendwie nachträglich einbaue (so als Zusatz
hinter die IP angehangen) geht also nicht? Sonst muss ich ja alle Seiten nochmal neu machen
Oder kann man die Session-ID auch irgendwie beim Login in die DB schreiben?
Das umschreiben ist relativ einfach. Ich gehe davon aus, dass du am Anfang jeder Seite code hast, in dem eine Datenbankanfrage gemacht wird, bei dem der zur IP gehörende Username ausgelesen wird und dann in einer Variable (z.B. $username) gespeichert wird.
Diesen Datenbank-Code ersetzt du einfach durch die zwei Zeilen session_start(); und $username = $_SESSION['username'].
Dann nimmst du noch dein Login-Script, wo irgendwo vermutlich Code ist, um die IP des sich neu anmeldenden Benutzers (aus der Variable $username z.B.) in der Datenbank zu speichern und schreibst da stattdessen die beiden Zeilen session_start(); und $_SESSION['username'] = $username.
Fertig. Du hast also, wenn du vorher session_start(); aufrufst ganz einfach ein Array von Variablen ($_SESSION), das ohne dass du dich genau damit auseinandersetzen muss, wie das geht, automatisch wieder zugänglich gemacht wird, wenn jemand vom gleichen PC eine Seite aufruft.
Wenn also ein Nutzer keine Cookies aktiviert hat funktioniert das ganze nicht?
Theoretisch schon, aber dann wird es langsam kompliziert. Denn dann musst du dafür sorgen, dass die Session-ID irgendwie anders als übers Cookie an dein Skript übertragen wird. Du musst also an jeden Link auf deiner Homepage per PHP ranhängen "?session=" und dann die jeweilige Session-ID und dann in jedem Skript vorne dranhängen session_id($_GET['session']); Das ist wie gesagt ein wenig komplizierter, aber den Anteil an Menschen ohne aktivierte Cookies schätze ich für sehr gering.
@myselfmade: Damit wird dein vorheriger Post von der Top-1 der dümmsten Statements die ich in den letzten Sechs Monaten gehört habe verdrängt. Lies dir bitte noch einmal genau die Fragestellung durch. IP-Speicherung bringt nichts, wenn man auch user auseinander halten will, die die gleiche IP haben. Die Frage ist, wie man das also anders machen kann, als mit ner IP-Speicherung, um das Problem zu umgehen. Und die Aussage, wie man die IP speichert hat dann wie viel mit dieser Fragestellung zu tun? Genau. Nichts. Und die Aussage, wie lange man die IP speichert hat wie viel mit der Fragestellung zu tun? Exakt. Genausowenig. Und sie hat wieviel mit meinen Vorwürfen zu tun, dass das nichts mit der Fragestellung zu tun hat? Genau. Noch weniger. -
@merovirus
Entspann dich...
@my-selfmade
Ich muss merovirus allerdings Recht geben, dass es nicht schaden kann, das Thema vor dem Posten genau zu lesen und nur ausreichend qualifizierte Antworten abzugeben.
Und nun bitte back to topic. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage