Unique String/Session ID erzeugen mit PHP

Auf der Suche nach einer einfachen Funktion die einen unique-String/SessionID erzeugt habe ich mir kurzfristig eine eigene Funktion geschrieben, die verschied. Strings kombiniert und mehrfach MD5-kodiert.

Die Funktion hat den Vorteil, dass definitiv einzigartige Strings erzeugt werden (z.B. für SessionIDs), ohne eine Unique-Prüfung per Datenbank durchführen zu müssen.

Hier die Funktion:

function create_sessid() {

$token1 = md5(uniqid(rand(), true));
$token2 = md5(uniqid(rand(), true));

$token3 = md5(uniqid(rand(), true));
$token4 = md5(uniqid(rand(), true));

$zufall = $token1.”-”.$token2;
$zufall = md5($zufall);

$zufall2 = $token3.”-”.$token4;
$zufall2 = md5($zufall2);

$sessiid = md5($zufall2.$zufall);

return $sessiid;
}

Über admin

Herzlich Willkommen in meinem Blog. Hier will ich über meine Erfahrungen mit PHP & MySQL berichten und hilfreiche Tips bei der Programmierung geben. Viel Spaß! :)
Dieser Beitrag wurde unter PHP, Schnipsel abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

8 Kommentare zu Unique String/Session ID erzeugen mit PHP

  1. Niko sagt:

    Danke, sieht wirklich gut aus! Habe Unique Strings bisher immer in der Datenbank abgelegt und später auf doppelte Einträge überprüft. Werde deine Methode aber mal im größerem Umfang testen. Sobald ich Ergebnisse hab, meld ich mich wieder :)

    beste Grüße,

    Niko

  2. admin sagt:

    hallo,
    ich hab einen Test gemacht mit 2 Mio. Durchläufen, da ist kein doppelter String erzeugt worden. Werde jedoch heute Nacht nochmal einen Test laufen lassen. Falls sich herausstellt, das doppelte Einträge herauskommen melde ich mich wieder.

  3. Der Klempner sagt:

    Wo liegt hier der Vorteil gegenüber der Nutzung der in PHP integrierten Session-Verwaltung[1]? Ernst gemeinte Frage. Geht’s darum auf Cookies oder Übertragung in der URL zu verzichten und die ID in den HTTP-Headern zu
    senden?

    [1] http://de.php.net/session

    Der Klempner

  4. admin sagt:

    Von Vorteil an sich kann man nicht reden, da die Funktion oben nicht auf die integrierte Session-Verwaltung abzielt.

    Die Funktion kann z.B. verwendet werden wenn als Session Management eine eigene Lösung oder z.B. MemCache verwendet wird, in der man die SessionIDs manuell erzeugt. Vorteil der obigen Lösung ist, das keine Duplikatsprüfung z.B. per Datenbank (= Serverlastig) benötigt wird.

    Weiterhin kann die Funktion auch für Zufallsstrings (Userfreischaltung, Links etc.) verwendet werden.

  5. ffx sagt:

    Hallo,

    die PHP-Funktion session_id() liefert auch eine Unique-Id. Einzigartig in Bezug auf gleichzeitige Sessions auf der Webseite.

  6. David sagt:

    Meiner Meinung nach ist bereits

    md5(uniqid(rand(), true).uniqueid(rand(), true))

    völlig ausreichend. Die Frage ist doch, wann dieser Aufruf denselben Wert liefert – und das wären folgende 2 Fälle:

    1. Die MD5-Funktion liefert dasselbe Ergebnis für zwei unterschiedliche Werte. Theoretisch ist das möglich, aber unwahrscheinlich (ca. 1:1,8e+19). Unabhängig davon wäre es nicht zu beeinflussen.

    2. Die Funktion wird auf die Millisekunde genau zur selben Zeit und mit demselben Initialwert des Zufallsgenerators aufgerufen. Das ist auch unwahrscheinlich, tritt dieses Ereignis aber dennoch ein, so kann auch die weitere Verwendung desselben Zufallsgenerators das Ergebnis (nämlich 2 mal dieselbe Session-ID) nicht ändern. Einzig die Rechenzeit, die zur Ausführung der Operation benötigt wird, kann auf dem Server einen tatsächlich zufälligen Wert herbeiführen, weshalb uniquid zweimal aufgerufen wird; allerdings muss man auch dann darauf bauen, dass 2 Anfragen unterschiedlich schnell bearbeitet werden – falls nicht, schadet der doppelte Aufruf von uniqid aber auch nicht.

    Liebe Grüße!

  7. David sagt:

    Ich meine natürlich:

    md5(uniqid(rand(), true).uniqid(rand(), true))

    :-)

  8. David sagt:

    Und noch zwei kleine Korrekturen:

    - Der erste Fall tritt mit einer Wahrscheinlichkeit von rund 1:3,4e+38 ein – er tritt also nicht ein.

    - Auch im laufenden Text heißt es “uniqid”…

    Liebe Grüße! :-)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>