Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 925
Heisann allesammen. Jeg er ny på forumet og kunne trengt hjelp til en PHP-funksjon. Det jeg vil er at når folk registrerer seg på siden min, skal IP-en deres bli lagret, jeg skal kunne se hvor mange ganger samme IP har registrert seg. På den måten blir det lett å se hvem som har lagd mange brukere fra samme IP. Jeg vil også at alt skal lagres i en variabel. Jeg har prøvd lenge uten å få det til, jeg er ingen ekspert på PHP, langt ifra, men fant ikke noe sted hvor det sto hvordan man gjorde dette.

[COLOR="Red"]$num = Database::query("SELECT count(`id`) AS `antall` FROM `users` WHERE `IP`='".Database::escape($_SERVER['REMOTE_ADDR'])."' AND `health` > 0");[/COLOR]

jeg har en row som heter 'id' i databasen, i et table som heter 'users'. Dette skal være et tekstbasert mafiaspill, derfor 'health' på slutten. Håper noen har en løsning på problemet mitt, for jeg finner virkelig ikke ut av hvordan jeg gjør det.

Takk for tiden din
Limited edition
Moff's Avatar
Jeg klarer ikke i skrivende stund å se hva slags query-string du har der, men uansett - du må huske på at folk flest har dynamisk IP, så dette systemet vil bli veldig unøyaktig (IP-adressen endres fra tid til annen). Jeg ville heller satset på en cookie-basert løsning, fordi folk sjelden slettet cookies. En cookie er en liten tekstfil som lagres på datamaskinen til den som besøker deg, og den kan brukes til blant annet automatisk innlogging (slik som dette forumet har, for eksempel). Cookies er knyttet til domenet ditt, så du har bare tilgang til den cookien som skriptet ditt har opprettet. Det aller enkleste vil da bare være å se om brukeren har en cookie fra ditt domene, og sørge for at man får en slik når man registrerer seg. Her er noen kodesnutter (jeg bruker MySQL her):

Kode

<?php
// Registrering:
if(isset($_POST['brukernavn'])) { // Sjekker kun etter brukernavn her, du bør fylle inn det som passer for ditt skript
$brukernavn = mysql_real_escape_string($_POST['brukernavn']); // Forutsetter at du er koblet til MySQL-DB
mysql_query("insert into users (brukernavn) values ('$brukernavn')"); // Her bør du også sjekke for duplikater (brukere med samma navn etc.)
setcookie('kjeks', 'Tagged!', 0); // Cookiens navn, innhold og holdbarhet (0 = uendelig)
}

// For å sjekke om cookien finnes fra før:
if(!empty($_COOKIE['kjeks'])) {
echo 'Denne datamaskinen har registrert en konto fra før.';
} else {
echo 'Denne brukeren har slettet cookies eller ikke registrert seg.';
}
?>
For mest mulig treffsikkerhet kan du prøve en kombinasjon av cookies og IP. Lagre brukerens ID-nummer i cookien, og oppdater brukerens IP-adresse i databasen med den han/hun bruker akkurat nå. Hvis du vil ha det enda mer nøyaktig kan du lagre hele IP-historikken til hver enkelt bruker, slik at du kan knytte hver bruker-ID opp mot hver IP-adresse. Når en ny bruker registrer seg kan du da sjekke opp mot alle IP-adressene du har lagret, og kanskje finne en match mot en IP som en annen bruker har fått tildelt på et senere tidspunkt enn da han/hun registrerte seg. Jeg ser imidlertid strengt tatt ikke poenget med å gjøre det så vanskelig; hvis spilleren din har tre søsken på nett, så bør de vel kunne spille som alle andre. Hvis de bruker tre ulike maskiner på samme LAN så vil de ut fra IP se ut som en og samme bruker - mens cookies vil kunne skille dem fra hverandre.

For spillets del bør du heller lage et system som kan oppdage hvis en spiller driver med "farming" (regner med det er dette du er redd for) ved å se om to brukere opererer sammen unormalt mye. Cookie-forslaget mitt kan også hjelpe deg her; ved å lage brukerens ID-nummer i cookien kan systemet ditt se om samme datamaskin bytter bruker-ID unormalt mye. (Cookien oppdateres ved innlogging, med bruker-ID-en til den som logger inn.)

Et alternativ til alt dette er å bruke sessions. Sessions er en måte å midlertidig lagre informasjon om en bruker - og du kan utnytte dette til å se om en bruker logger inn og ut med ulike brukerkontoer i løpet av kort tid.

Kode

<?php
session_start();
if(isset($_SESSION['kjeks'])) {
// Session-variabelen "kjeks" finnes fra før - brukeren har vært her for kort tid siden
} else {
// Serveren kjenner ikke igjen denne brukeren
}
?>
For din del vil nok cookies være den beste løsningen, fordi de ikke slettes automatisk etter en gitt tidsperiode (hvis du velger holdbarhet 0, altså).
Trådstarter
Tusen takk for hjelpen Moff. Jeg lærte mye av det du skrev, og jeg fikk implementert det i scriptet mitt, og det funker. Eneste problemet jeg står igjen med, er at han jeg lager spillet med sier at cookies ikke er sikkert nok. Grunnen til dette er jo at det er så lett å slette cookies, og hvis spillet blir stort nok kan det jo fort være at alle plutselig vet det. På den måten kan i prinsippet en person ha uendelig mange brukere. Det kan vi jo ikke ha noe av. Derfor vil jeg heller nå prøve å registrere IP-en og ha maks x antall personer registrert på IP-en, samtidig som vi har cookiekoden din implementert i scripet. Så jobben er halvveis ferdig kan man jo si, takket være deg =) Jeg setter stor pris på både tiden din og kompetansen din.
IP-adresse er ikke noe du kan bruke til å identifisere en bruker med.
- Flere personer kan dele samme IP-adresse(fra 2-3 personer til flere tusen)
- Mange private husstander bytter IP-adresse regelmessig

Krev enten at brukeren registrerer mobilnummeret sitt, eller e-postadressen sin. Og implementer en funksjon som sender en SMS eller e-post som inneholder en kode brukeren må taste inn. Dette for å bekrefte av vedkommende faktisk har tilgang til adressen. Samtidig bør du og sperre bruken av alle tjenester hvor du kan opprette midlertidige e-postadresser.

Dette er heller ingen garanti, men langt sikrere enn IP-adressen. Alternativt, om du virkelig vil gå for gull, kan du jo implementere BankID eller BuyPass.
Trådstarter
Okei, takk for godt svar. De må allerede registrere e-postadressen sin, så det er dekket. Brukeren må også aktiveres. Det vi ikke har sikret oss mot, er midlertidige adresser som spamavert og lignende. Jeg vet heller ikke hvordan man gjør dette, for det finne jo så mange forskjellige tjenester, så å f.eks. ikke la folk bruke spamavert funker ikke. Det jeg evt kunne ha gjort, var å bare godta et visst antall email tjenere, som gmail, hotmail, online.no osv osv. Problemet her er at mange ikke vil registrere seg hvis vi ikke støtter den emailen de har. Har du en løsning på dette?
Enten så må du sjekke opp i hvilke gratistjenester som finnes der ute, og da fortløpende legge disse inn, eller så kan du jo sjekke om det finnes en tjeneste som lister opp slike tjenester igjen

Et annet alternativ, bare en ide, kan jo være å lage to bekreftelsese-poster. En som blir sendt ut med en gang, som gir tilgang, og en nr 2, som for eks blir sendt ut etter 2 dager som inneholder en link. Om ikke brukeren klikker på linken innen 48 timer så slettes kontoen. Disse midlertidige e-postadressetjenestene pleier som regel å slette e-postadressene etter et par timer.
Trådstarter
Jo takk for svar igjen, jeg vet selv om flere epostadressetjenester som aldri sletter mailen, så jeg tror det blir unødvendig å sende to mailer. Så kan hende jeg går for ideen din med å fortløpende legge dem inn, så flere og flere tjenester blir utelukket.
Nå kan det hende jeg har misforstått dette litt, men er det ikke bare å bruke ReCaptcha? Det er en tjeneste som gir et bilde med forvrengte bokstaver. En person skal fint klare å lese bokstavene og skrive inn riktig, mens en bot ikke har sjans.
"Problemet" er at flere personer registrerer seg flere ganger. Ikke at boter registrerer seg automatisk. Men Captcha er lurt uansett
Trådstarter
Vi vil høyst sannsynlig bruke captcha, vet ikke om på selve registreringen, vi vil jo unngå nødvendigheten av det, men inne i spillet som er tekstbasert, er det nesten et must å ha det.