Ne randomUUID donner un identifiant unique?
Je suis en train de créer des jetons de session pour mon API REST. Chaque fois que l'utilisateur se connecte, je suis entrain de créer un nouveau jeton par
UUID token = UUID.randomUUID();
user.setSessionId(token.toString());
Sessions.INSTANCE.sessions.put(user.getName(), user.getSessionId());
Cependant, je ne suis pas sûr de la façon de se protéger contre double sessionTokens.
Par exemple: Peut-il y avoir un scénario où l'utilisateur user1 signes et obtient un jeton 87955dc9-d2ca-4f79-b7c8-b0223a32532a
et user2 signes et aussi obtient un jeton 87955dc9-d2ca-4f79-b7c8-b0223a32532a
.
Est-il une meilleure manière de faire ceci?
randomUUID()
ne pas entrer en collision très souvent.OriginalL'auteur birdy | 2014-01-08
Vous devez vous connecter pour publier un commentaire.
Si vous obtenez un UUID collision, aller jouer au loto.
De Wikipedia:
Eh bien, dans les moments de Big Data, ce qui peut être produit facilement..
La question d'origine était dans le contexte d'identificateurs pour une api REST. Si vous êtes à la génération de "dizaines de milliers de milliards" de sessions dans votre api, oui, alors les collisions pourrait être un sujet de préoccupation, mais je pari que vous aurez d'autres problèmes.
"le risque annuel de quelqu'un qui est frappé par une météorite....." n'est pas une garantie => En 2016, un homme a été tué par une météorite
Ce qui concerne la génération des uuid comme le nom des fichiers qui sont stockés dans une aws s3 cluster?
OriginalL'auteur Tom G
Oracle UUID document. http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html
De l'utilisation de cet algorithme à partir de l'Internet Engineering Task Force. http://www.ietf.org/rfc/rfc4122.txt
Une citation de l'abstrait.
Tandis que le résumé réclamations de garantie, il y a seulement
3.4 x 10^38
combinaisons. CodeChimpC'est une citation de l'abrégé de l'algorithme utilisé. Pas mes mots.
Que serait
(2^128)-1
valeurs possibles, ou 340,282,366,920,938,463,463,374,607,431,768,211,455. Pourtant, il est "possible" pour qu'il y ait une collision, mais vous devez avoir un 1 dans (2^128)-1 chance de se concrétiser, en mettant à nu l'algorithme utilisé est décent. Ce n'est pas une très bonne chance.Encore, je n'utiliserais pas le mot "garantie", et je considère que abstraits pour être incorrecte dans ce domaine.
OriginalL'auteur SethB
Depuis un UUID a une taille finie il n'y a aucun moyen pour qu'il soit unique à travers tout l'espace et le temps.
Si vous avez besoin d'un UUID qui est garanti pour être unique dans toute raisonnable cas d'utilisation que vous pouvez utiliser Log4j 2 l'Uuid.getTimeBasedUuid(). Il est unique pour environ 8 900 le nombre d'années aussi longtemps que vous générez moins de 10 000 Uuid par milliseconde.
OriginalL'auteur rgoers