Avatar billede lone_a_p Praktikant
15. oktober 2008 - 13:09 Der er 14 kommentarer og
1 løsning

Unique id

Kære eksperter,

Jeg har behov for at oprette et unique-id i min brugerdatabase, som kan bruges til mail-bekræftigelse. Således at jeg kan sende et link som dette:

www.mydomain.dk/bekraeftmail.php?email=xxx@zzz.dk&uniqueid=jh4HYS73jdHGEOdue745

Kan mysql selv oprette et sådan uniqueid? Jeg mener, at dette kan lade sig gøre, jeg kan blot ikke lige finde funktionen.

Håber på hjælp :)

Mvh Lone
Avatar billede fennec Nybegynder
15. oktober 2008 - 13:22 #1
Du kan f.eks bruge ROWGUIDCOL (generere et GUID).
http://forums.databasejournal.com/archive/index.php/t-34052.html

Ellers kan du også vælge at hashe dine url parametre som diskuteret her:
http://www.eksperten.dk/spm/695272
Avatar billede fennec Nybegynder
15. oktober 2008 - 13:24 #2
... PHP har vist en MD5 hash funktione indbygget, så det er lidt nemmere her. Men du burde kunne se ideen i funktionen og porte det fra asp til php.
Avatar billede fennec Nybegynder
15. oktober 2008 - 13:25 #3
Glem mit første link. Så lige at det var til MS-SQL og ikke MySQL...
Avatar billede fennec Nybegynder
15. oktober 2008 - 13:29 #4
I MySQL lader det til at du bare skal bruge UUID() funktionen:
http://forums.mysql.com/read.php?20,9430,9695#msg-9695
Avatar billede olebole Juniormester
15. oktober 2008 - 13:30 #5
<ole>

Hvorfor ikke bare et felt med autoincrement? Dets værdi er jo altid unikt i den tabel  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
15. oktober 2008 - 13:32 #6
- og så bliver dine links nok heller ikke så lange de første par år  ;o)
Avatar billede fennec Nybegynder
15. oktober 2008 - 13:40 #7
olebole >>
Tror måske det er fordi man så ikke bare kan gætte sig frem til ID'et og validere emails, som ikke skulle have været valideret...
Avatar billede lone_a_p Praktikant
15. oktober 2008 - 13:46 #8
fennec> jep, det er fordi man ikke må kunne gætte sig frem til det

jeg synes ikke helt denne uuid()-funktion gør det helt rigtigt.

Det er kun de første 10 cifre der ændrer sig ... de sidste mange cifre er dermed blot "spild" i databasen.
Avatar billede fennec Nybegynder
15. oktober 2008 - 14:16 #9
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid
1-3. del er et timestamp.
4. del lader til at være sommer/vinter tid.
5. del ladet til at være en hardware key, så 2 computere ikke kan generere det samme tal her.

På en server vil del 4 næsten altid være det samme (skifter ved sommer/vinter tid) og del 5 vil altid være ens, medmindre hardware byttes ud.

Så ja den er ikke mere unik end at man kan gætte sig til de efterfølgende numre, men man skal prøve for hvert millisek så der er MANGE at prøve...

Men ellers tag et kik på hash løsningen jeg også har linket til. Det fungere (bruger det selv)
Avatar billede lone_a_p Praktikant
15. oktober 2008 - 14:40 #10
jeg har selv lavet en function, så kan jeg altid have styr over tegn og længde ;)

I må gerne lægge et par svar :)
Avatar billede fennec Nybegynder
15. oktober 2008 - 15:05 #11
.o) <-- One Eyed Jack
Avatar billede olebole Juniormester
15. oktober 2008 - 15:30 #12
Ikke points til mig, tak. Jeg misforstod spørgsmålet lidt, så dén løsning var ikke en løsning. En anden gang  ;o)
Avatar billede lone_a_p Praktikant
15. oktober 2008 - 16:16 #13
ok - fennec får pointene - tak for responsen!
Avatar billede arne_v Ekspert
16. oktober 2008 - 02:01 #14
Vær forsigtig med selv at lave en funktion fra bunden af medmindre du har en PhD i matematik.

Det nemmeste vil være at kombinere det foreslåede og bruge SHA1(UUID()).

Eller MD5(UUID()) men den udsender forkerte signaler.

Da en hash har en lille bitte sandsynlighed for at generere duplikater bør du
teste for dette. Chancen for at resultat er et duplikat er ca. antal andre
udestående gange med 10 opløftet til -48.
Avatar billede lone_a_p Praktikant
16. oktober 2008 - 13:06 #15
Jeg har blot lavet en funktion der piller ud fra en streng:
$streng = "abcdef...osv...ABCDEF...osv...1234..."

Så kalder jeg funktionen kald_funktion(streng_længde);

Jeg kom til at tænke på, at de jo ikke engang behøver at være unikke. De skal jo blot hænge sammen med email-adressen, for at den kan blive valideret.

Det synes jeg burde være safe nok :) Ved bare ik hvor lang linjen skal være for at den er "umulig" at gætte?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester