php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
TAN-Invite System realisieren (PHP/MYSQL)


 
norodon
08-01-2009, 02:29 
 
Hiho,

für meine Internetseite möchte ich eine Art TAN-Invitesystem einbauen.

Mit Hilfe eines TAN's kann eine person X eine person Y in das System einladen und erföffnet ihm so die möglichkeit sich anzumelden.

Ich habe dafür 2 Ansätze: jeder User der invitet wird bekommt 5 TAN zugewiesen, egal ob er diese nutzt oder nicht. Diese kann er jedoch an eine person seiner wahl weitergeben.

Alternativ kann eine person 5 TANs generieren lassen und diese dann verteilen.

Es kommt zwar auf dasselbe hinaus, aber ich bin gerade am überlegen wie ich es Datenbanktechnisch am besten umsetze in hinblick auf performance und speicherverbrauch.


Weitere Alternative wäre, Einladungen über die Emailadresse und nur 5 Einladungen pro User erlauben.

Jemand mit sowas erfahrung?



Danke im Vorraus

 
Blackgreetz
08-01-2009, 02:45 
 
Gibts denn bestimmte Vorgaben über maximale Einladungen?

Ich würde eher so rangehen, dass man eine Einladung on-the-fly geniert und diese mit einer maximlen gültigen Dauer versiehst. (Damit mein ich keine e-Mail sondern einen direkten Link)
Dann speicherst natürlich den Werber und dann sollte es gut sein.

mfg

 
onemorenerd
08-01-2009, 03:43 
 
Ich würde es so machen:

- User klickt auf "Einladung versenden"
- System schickt an vom User eingegebene Mailadresse einen Link mit einem eindeutigen Schlüssel
- Schlüssel wird mit Erstellungsdatum und Zuordnung zu User in DB gespeichert

- Empfänger klickt auf Link in der Einladung (und registriert sich oder wozu er eben eingeladen wurde)
- Schlüssel wird aus DB gelöscht
- für o.g. User wird ein Zähler erhöht

Vor den ersten Teil (User klickt) gehört noch die Prüfung, ob der Zähler des Users schon den maximalen Wert hat. Ist dem so, werden alle dem User zugeordneten Schlüssen, deren Erstellung zu lange zurückliegt gelöscht. Der Zähler des Users wird um die Anzahl gelöschter Schlüssel herabgesetzt. Ist der Zähler nun nicht mehr maximal, kann der User eine Einladung verschicken.


Minimaler Speicherverbrauch und bei richtiger Indizierung auch entsprechend gute Performance. Allerdings dürfte selbst das vorgenerieren aller Schlüssel für jeden User keine Probleme machen - selbst bei 1 Mio. User wären das nur 5 Mio. kleine Datensätze. Das schafft jedes erwachsene DBS.

 
norodon
08-01-2009, 23:31 
 
Eure Ansätze gefallen mir. Denke ich werde es genau so umsetzen.

Noch ein Tipp wie man Schlüssel generieren kann? Hab an Random zahlen gedacht (10-15 Stellig) und dann mit MD5-Umwandeln, dann haben sie immer dieselbe Länge und jeder MD5-Key ist eindeutig.

 
kaiand1
08-01-2009, 23:50 
 
Randomzahlen würde ich nciht nehmen da diese sich ja irgendwo mal wiederholen können.
Ich würde eher was mit dem Timestamp machen da dieser eigentlich wirklich nur einmal vorkommt :)
Da es sehr unwarscheinlich ist das mehere User Zeitgleich auf die Sekunde genau eine Einladung erstellen werden...

 
ghostgambler
09-01-2009, 00:00 
 
Original geschrieben von kaiand1
Randomzahlen würde ich nciht nehmen da diese sich ja irgendwo mal wiederholen können.
Ich würde eher was mit dem Timestamp machen da dieser eigentlich wirklich nur einmal vorkommt :)
Da es sehr unwarscheinlich ist das mehere User Zeitgleich auf die Sekunde genau eine Einladung erstellen werden...
ungefähr so unwahrscheinlich wie bei zufälligen Zahlen zwei Mal die gleiche zu erhalten vielleicht...?

Kollisionen muss man halt behandeln oder akzeptieren.

 
norodon
09-01-2009, 00:19 
 
Gut, das ABfragen und die Kollision wäre ja kein Problem. Die im Momnt aktiven Keys stehen ja in der Datenbank und es lässt sich leicht prüfen ob ein Key bereits dort enthalten ist.

Ist das der Fall wird die Key generierung wiederholt.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:32 Uhr.