På et website jeg udvikler på nu, er det et krav, at afstemninger er sikre, anonyme og at der samtidig kun kan stemmes én gang.
Da alle brugere er registreret, kan der checkes på der member_id, så det er ikke nødvendigt at checke på cookies, IP-adresser eller andre ting. Sitet benytter SSL ved afstemningerne.
Samtidig er det dog er krav, at databasen ikke skal vide, hvad brugeren har stemt - blot at medlemmet har stemt. Men det skal være muligt for brugeren at verificere - når afstemningen er slut - at alt er gået korrekt til.
Den måde jeg har implementeret det på indtil videre er følgende:
2 tabeller:
pt_voters: voters_id, entry_id, member_id, ip_address
pt_votes: votes_id, entry_id, vote, vote_time
Dvs
pt_voters viser, om brugeren har stemt i afstemningen, der defineres ved entry_id. Og
pt_votes viser, hvad der er stemt.
- $entry_id = $_POST['entry_id'];
- $vote = $_POST['vote'];
- $time_now = time();
- $votes_id = str_makerand(10,10,1,0,1); // tilfældigt ID, fx E4AK7NAT7U
- mysql_query("INSERT INTO pt_votes (votes_id,entry_id,vote,vote_time) VALUES ('$votes_id','$entry_id','$vote','$time_now')");
- $voters_id = mt_rand(100, 1000000000000);
- mysql_query("INSERT INTO pt_voters voters_id,entry_id,member_id,ip_address) VALUES ('$voters_id','$entry_id','$member_id','$ip_address')");
- mysql_query("ALTER TABLE pt_voters ORDER BY entry_id ASC");
Koden er simplificeret lidt, da der også er checks på, om de tilfældige IDs eksisterer i tabellen i forvejen og lignende.
Mit spørgsmål er: Er det sikkert? Eller er det muligt at finde frem til, hvad en given bruger har stemt?
Indlæg senest redigeret d. 30.11.2011 09:05 af Bruger #16897