Login mit SESSION und Cookie - wie sicher machen?

aargau

Erfahrenes Mitglied
Derzeit werden die Daten von User nur als Session gespeichert und verfallen somit beim Schliessen des Browsers wieder. Nun möchte ich das ein wenig verlängern das der user bis zu 1Monat eingeloggt bleiben kann.

Nun soll er aber ausgeloggt werden wenn er sich auf einem anderen PC anmeldet, allso so das er nur auf einem Rechner zugleich aktiv sein kann. Mit der IP adresse denke ich geht das schlecht, da diese jenach provider sehr schnell endert.

Gibt es irgend eine eindeutige ID die ich dazu verwenden kann? Oder könnte ich auch einfach die SESSION ID in das Cookie Speichern? Wenn ja, wie?

In das Cookie selbst möchte ich den Nickname, ID etc nicht legen, da man das Cookie sehr einfach verfälschen kann. Daher soll nur ein Code rein der dann in der My SQL datenbank gesucht wird und wenn er vorhanden ist + eine eindeutige ID des PCs stimmt möchte ich wieder die Session setzten.

Es Fehlt allso nur an der umsetztung eines eindeutigen Codes oder die weitere verwendung der SESSION
 
Ich generiere dafür einen [phpf]sha1[/phpf] Hash aus folgenden Werten:

(alle aus $_SERVER)

HTTP_USER_AGENT
HTTP_ACCEPT
HTTP_ACCEPT_LANGUAGE
HTTP_ACCEPT_CHARSET
HTTP_ACCEPT_ENCODING


Eine wirklich eindeutige ID kann man leider nicht erzeugen... Grundsätzlich würde ich jedoch sagen: Je mehr Daten, desto einzigartiger wird der Hash.

Grundsätzlich sollte man jedoch auf den Einsatz der Benutzer IP verzichten!
 
Das klingt gut. Könnte ich nun nicht auch noch den Timestamp dazunehmen, den Hash dann in ein Cookie + die DB abspeichern und beim aufrufen der seite kontrolieren ob ein Cookie vorhanden ist und wenn ja den Hash in der DB suchen, wenn dieser Dann Existiert die Daten davon auslesen und diese dann in die Session packen?

Zusätzlich müsste ich dann halt sicherstellen, dass jeder user nur einen eintrag in der DB hat, allso eben immer nur auf einem PC Aktiv sein kann.

Was mich noch wunder nehmen würde, würdet ihr bei Seitenaufruf kontolieren ob das Cookie existiert und der Code in der db ist oder nur wenn keine SESSION vorhaben ist?
 
Ich würde eine zwei Tabelle dazu erstellen:

user_logins

usr_id (zeigt auf die ID der User Tabelle)
usr_hash (der generierte Hash)
login_time (die Zeit des Logins)


Den Hash speicherst du im Cookie.
Danach prüfst du ob der Hask im Cookie mit den momentanen Einstellungen UND mit dem in der Datenbank übereinstimmt UND der login_time noch nicht länger als X Tage alt ist.
Falls das alles wahr ist, ist der User eingeloggt ;)

Und ich würde es bei jedem Seitenaufruf checken, da du so auch eine gewisse Sicherheit gegen Session Hijacking bekommst.
 
Danke für die Hilfe,
Werde morgen mal was Programmieren, heute werde ich wohl nicht mehr dazu kommen.
 
Das „Accept“-Header-Feld eignet sich zur Webbrowser-Identifikation nicht besonders, da die gelieferten Informationen mitunter bereits von Anfrage zu Anfrage unterschiedlich sein können.
 

Neue Beiträge

Zurück