Tut randomUUID geben Sie eine eindeutige id?
Ich versuche zu erstellen, session-tokens für mein REST-API. Jedes mal, wenn der Benutzer sich anmeldet, ich bin ein neues token erstellen von
UUID token = UUID.randomUUID();
user.setSessionId(token.toString());
Sessions.INSTANCE.sessions.put(user.getName(), user.getSessionId());
Allerdings bin ich mir nicht sicher, wie Sie Sie schützen gegen die doppelte sessionTokens.
Zum Beispiel: gibt es ein Szenario, wenn user1 meldet sich an und bekommt einen token 87955dc9-d2ca-4f79-b7c8-b0223a32532a
" und "Benutzer2" - Schilder in und auch bekommt einen token 87955dc9-d2ca-4f79-b7c8-b0223a32532a
.
Gibt es einen besseren Weg, dies zu tun?
randomUUID()
nicht kollidieren sehr oft.InformationsquelleAutor birdy | 2014-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du eine UUID Kollision, gehen Lotto spielen weiter.
Aus Der Wikipedia:
Gut, in Zeiten von Big Data, das kann leicht passieren..
Die ursprüngliche Frage war im Kontext der Bezeichner für eine REST-api. Wenn Sie die "Erzeugung von zig Billionen" - Sitzungen in der api, ja, dann Kollisionen könnte ein Problem sein, aber ich würde Wetten, Sie haben andere Probleme zuerst.
"das jährliche Risiko, dass jemand von einem Meteoriten getroffen....." keine Garantie => Im Jahr 2016 ein Mann wurde getötet, von einem Meteoriten
Was ist Generierung von uuid als name für die Dateien, die gespeichert sind in einer aws-s3-cluster?
InformationsquelleAutor Tom G
Oracle-UUID-Dokument. http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html
Verwenden Sie diesen Algorithmus aus den von Der Internet Engineering Task Force. http://www.ietf.org/rfc/rfc4122.txt
Einem Zitat aus dem abstract.
Während die abstrakten Forderungen eine Garantie gibt es nur
3.4 x 10^38
Kombinationen. CodeChimpDas ist ein Zitat aus der Zusammenfassung des Algorithmus verwendet. Nicht meine Worte.
Das wäre
(2^128)-1
mögliche Werte, oder 340,282,366,920,938,463,463,374,607,431,768,211,455. Noch ist es "möglich", dass es eine Kollision, aber Sie hätte eine 1 in (2^128)-1 die chance, dass das passiert, baring der verwendete Algorithmus war anständig. Das ist nicht eine sehr gute chance.Dennoch würde ich nicht das Wort "Garantie", und ich würde überlegen, Abstrakt, falsch zu sein in dieser Hinsicht.
InformationsquelleAutor SethB
Da eine UUID hat eine endliche Größe gibt es keine Möglichkeit für Sie, einzigartig zu sein, über alle von Raum und Zeit.
Wenn Sie brauchen, um eine UUID, die garantiert eindeutig sein, innerhalb einer angemessenen Nutzung Fall können Sie mit Log4j 2 Uuid.getTimeBasedUuid(). Es ist garantiert einzigartig für etwa 8,900 Jahren, so lange wie Sie erzeugt weniger als 10.000 UUIDs pro Millisekunde.
InformationsquelleAutor rgoers