webForumDet fria alternativet

Långt tal för userID

PHPur PHP

5 svar · 589 visningar · startad av s7eam

Medlem sedan mars 20066 inlägg
Frågan#1

Rubriknamnet är kanske lite missvisande men jag skall förklara.

Det är såhär att jag undrar på vilket sätt kan man skapa långa tal för exempelvis userID som syns ibland i url:n. T.ex använder lunarstorm sådant sätt att antingen lagra de så i databasen eller hashas de på nåt vänster i själva koden.

För att se det hela in action surfa in på lunarstorm och sedan för muspekaren över en användarens bild. Kika nere i statusfältet så ser du userID={432l-d432-6bfjk3-j788}.

Det ser ut som hexadecimala tal på nåt vänster men jag tvivlar på att det är det?

YouTube använder liknande grej på deras sajt.

Hur kan man skapa sådant i PHP. Någon?

Medlem sedan juni 20034 013 inlägg
#2

Det bästa sättet är väl att använda en slumptalsgenerator, exempelvis mt_rand().

Du kan ju sätta ihop en sträng med de tecken du vill ska kunna ingå i dina id:n och så låter du mt_rand() slumpa fram positioner i strängen.

<?php
$tecken = "0123456789abcdefghijklmnopqrstuvwxyz";
$len = strlen($tecken);
$id = "";
for ($i = 0; $i < 32; $i++)
{
  $id .= substr($tecken, mt_rand(0, $len), 1);
}
?>
Medlem sedan feb. 20034 441 inlägg
#3

s7eam skrev:

RT.ex använder lunarstorm sådant sätt att antingen lagra de så i databasen eller hashas de på nåt vänster i själva koden.

Det som tex. Lunarstorm använder är sk. "Replikerings-ID" som finns i tex. MS Access.
Liknande strängar likt den du visar slumpas fram i databasen (datatyp "räknare").

Själv tycker jag att det finns fler nackdelar med sådana ID'n, tex. går det inte att göra en INNER JOIN med ett sådant ID.
De gånger jag använt mig av det här har jag haft en "extra" kolumn räknare "heltal" för säkerhets skull.

Om det finns något liknande i tex. MySQL har jag ingen aning om, men det tror jag inte.

Medlem sedan mars 20066 inlägg
#4

tydal > tack för tipset.
Själv trodde jag att det fanns en funktion i själva MySQL som genererade ett långt tals för t.ex userID så att man sedan kan använda auto increment.

Man skulle iof kunna skapa en vanlig id som har auto increment och skapa en userID med slumpmässigt valda tecken. Så använder man bara join mot id:t men plockar ut userID:t. Synd att inte MySQL klarar av Replikerings-ID dock.

Medlem sedan feb. 20034 441 inlägg
#5

s7eam skrev:

Synd att inte MySQL klarar av Replikerings-ID dock.

Jag skrev att jag tror inte att MySQL klarar det.
I vilket sammanhang _måste_ du använda dig av den typen av ID?

Medlem sedan dec. 19996 721 inlägg
#6

Använd UUID() i MySQL, och lagra värdet i ett tillräckligt stort textfält.

138 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)