webForumDet fria alternativet

Hur unikt är ett sessionsid?

PHP

7 svar · 488 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1
  1. Är ett sessionsid unikt bara medan någon använder det, eller vet man att det aldrig återkommer för en annan användare?

följdfråga) Kan man använda sessionsid som primärnyckel i en databasrelation?

  1. Är ett sessionsid alltid en 32 bokstäver lång sträng? Vilket luktar md5(x)...
Medlem sedan aug. 20002 975 inlägg
#2

Manualen om konfigurationen skrev:

session.hash_function integer
session.hash_function allows you to specify the hash algorithm used to generate the session IDs. '0' means MD5 (128 bits) and '1' means SHA-1 (160 bits).

Note: This was introduced in PHP 5.

session.hash_bits_per_character integer
session.hash_bits_per_character allows you to define how many bits are stored in each character when converting the binary hash data to something readable. The possible values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", ",").

Note: This was introduced in PHP 5.

PHP använder alltså MD5 som default, men kan i PHP5 ställas om.

Jag vet inte hur stor sannolikheten för att MD5 genererar samma hash två gånger är, men i vilket fall är det teoretiskt möjligt.

Medlem sedan jan. 20065 inlägg
#3

Eftersom att ett sessionsid är ett MD5-hash så är det ganska unikt, kommer inte ihåg exakt hur algoritmen arbetar men jag kan säga så mycket som att 111111 och 111112 inte genererar MD5-hash som är det minsta lika.

Medlem sedan juni 20014 290 inlägg
#4

Någon som vet vad PHP bygger sin hash på?

Medlem sedan mars 20034 471 inlägg
#5

Tack, Matte! :D

Primärnyckel är ingen bra idé alltså. Men samtidigt måste det vara hyfsat unikt för annars skulle det ju inte fungera i praktiken. Har någon hört talas om att två användare samtidigt haft samma sessionsid? :q

esrange - det är visserligen sant som du säger, men frågan var den omvända. Hur stor är sannolikheten att två olika strängar får samma hash?

Medlem sedan juni 20034 013 inlägg
#6

aasah skrev:

Har någon hört talas om att två användare samtidigt haft samma sessionsid? :q

Samtidigt går ju inte eftersom sessions-ID:t då redan finns. Frågan är ju i stället om sessions-ID:t kan återanvändas.

aasah skrev:

Hur stor är sannolikheten att två olika strängar får samma hash?

1 / 2^128

Medlem sedan mars 20034 471 inlägg
#7

tydal skrev:

aasah skrev:

Hur stor är sannolikheten att två olika strängar får samma hash?

1 / 2^128

Hmm... tänker jag fel nu? Gäller inte detta endast under förutsättningen att md5 genererar hashvärden med likformig fördelning? Vet vi att den gör det? :q

Medlem sedan juni 20034 013 inlägg
#8

aasah skrev:

Hmm... tänker jag fel nu? Gäller inte detta endast under förutsättningen att md5 genererar hashvärden med likformig fördelning? Vet vi att den gör det? :q

Nej, det vet vi inte, men hittar du några bevis för motsatsen kan du nog bli berömd.

Om strängarna är kortare än 17 tecken ska sannolikheten vara 0 för att hasharna blir samma. För längre strängar så räcker ju inte antalet hashar till (2^128) utan då måste det finnas två strängar som ger samma. Men att hitta dessa är alltså väldigt osannolikt. Eller, ska vara:
http://paginas.terra.com.br/informatica/paulobarreto/hflounge.html

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)