Einzelnen Beitrag anzeigen
  #1  
Alt 01.08.2009, 14:50:30
SevenTeen SevenTeen ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 33
Beiträge: 6
Session Problem

Guten Tag, bin neu hier und würde mich über ein wenig Hilfe freuen.

Problematik:
********************************************************************** ***

Ich arbeite im Moment an einem Browsergame und will die Sicherheit hinter dem Login
ein wenig verfeinern.

Darum habe ich vor Usern zu verbieten, dass sie sich parallel ein 2. Mal mit dem gleichen
Account anmelden können. (Würde zu Problemen beim zb. schreiben in die DB führen)
Ich bin zu folgender Lösung gekommen:

Bei erfolgreichem Anmelden erstelle und sichere ich die jetzige session_id() unter der ID
des users in der SQL Datenbank und kann somit in der darauf folgenden ingame.php
anprüfen, ob die jetzige, der in der Datenbank (quasi von damals beim einloggen)
entspricht.

Loggt sich also ein 2. User unter dem gleichen Account ein bekommt dieser eine NEUE
session_ID(), diese wird darauf in die Datenbank geschrieben.

So. Wenn jetzt User 1 die Seite refresht kommt es wie gesagt zu einem neuen Abprüfen.
User 1 vergleicht seine session_ID() mit der in der Datenbank. Nun steht aber eine neue
drinnen. Er wird darauf informiert, dass sich ein 2. User angemeldet hat und wird gekickt.
Ich denke soweit ist alles zu verstehen.

Mein Problem:
********************************************************************** ***

Sobald User 1 seinen Browser refresht und es zur Prüfung kommt:
übernimmt User 1 tatsächlich den Wert der session_id() von User2 !!

Somit sind Browser session_id() und Datenbank session_id() gleich und der User darf
passieren.

Kleiner Ausschnitt aus der login.php

PHP-Code:
session_unset(); 
session_destroy();
            
session_id(rand_str()); /* habe es mit regenerate_session_id() ersetzt, im glauben
die funktion würde schuld daran sein, dass die sid von User 1 eben auch refresht wird.
hier wird nur ein neuer String generiert (32 zeichen)
*/
session_start(); 
Es wird also vor dem Login die alte Session 100% zerstört und eine neue mit neuer sID
angefangen. Warum bekommt User 1 dennoch nach refresh der Seite plötzlich die neue
zugewiesen? Seltsamerweise werden auch Rohstoffe, Ingame-Name etc kopiert =/


PS: Da ich schon einen ganzen Aufsatz geschrieben habe, wollte ich nicht auch noch
dutzende PHP Zeilen einbinden. Für mehr Code (zur Verständlichkeit) bitte melden, dann
poste ich zb. die komplette Login.php und Ingame.php

Geändert von SevenTeen (01.08.2009 um 15:07:31 Uhr)
Mit Zitat antworten