Hallo,
mt_rand() benutzt offensichtlich den Mersenne Twister, und das ist ein (Pseudo-)Zufallszahlengenerator. Und Zufallszahlen haben, wenn sie richtig erzeugt werden, die Eigenschaft, auch mehrmals auftreten zu können - ggf. sogar hintereinander (mit den entsprechenden Wahrscheinlichkeiten natürlich). Es muss nicht sein, aber es kann. Und darum eignen sich solche Generatoren allein nicht für diese Aufgabe.
Ich weiss nicht, wie PHP die Session-IDs erzeugt. Meine Idee ist, einen möglichst genauen Timestamp zu holen (dabei ist zu prüfen, dass dieser nicht 2+ mal vorkommt, was bei schnellen Rechnern durchaus möglich sein kann), und an ihn eine gute Zufallszahl zu hängen (nicht addieren, XORen oder so, dass garantiert keine Einmaligkeit). Allerdings bin ich mir nicht sicher, ob das sicher ist *gg*.
Gruß