IP też nie do końca jest pewnym rozwiązaniem. Dajmy na to, że conajmniej 2 osoby będą w tej samej sieci (np. domowej), to będą miały te same publiczne IP. Spowoduje to, że osoba, która druga będzie chciała wysłać ankietę, nie będzie tego mogła zrobić. W każdym razie, przyjmując najprostszy wariant, że zapiszemy IP do pliku
- Kod: Zaznacz cały
// tutaj twój kod
// tutaj miejsce w kodzie, gdzie wysyłasz maile. Pod tym kodem wstawiamy zapisywanie IP
$ips = json_decode(file_get_contents('ip.txt'));
$ips []= $_SERVER['REMOTE_ADDR'];
file_put_contents('ip.txt', json_encode($ips));
nastepnie albo na początku skryptu lub w miejscu gdzie obsługujemy wysłany formularz dodajesz
- Kod: Zaznacz cały
if (in_array($_SERVER['REMOTE_ADDR'], json_decode(file_get_contents('ip.txt')))) {
header('juz-glosowales.html');
exit;
}
Następnie utwórz plik ip.txt o treści
- Kod: Zaznacz cały
[]
Pozostaje drobna kwestia prywatności, najlepiej trzymać plik z IP poza publicznym zasięgiem. IP może być daną osobową, więc trzeba zapewnić odpowiednie zabezpieczenia.
Pewniejszym rozwiązaniem byłoby, gdyby każda ankieta miała unikalny identyfikator, który będzie wysyłany razem z odpowiedziami. Identyfikator taki, że nie łatwo go podrobić samemu (np. zwykła liczba). Zapisujesz gdzieś na serwerze wszystkie wysłane identyfikatory.
W momencie gdy ktoś wysle odpowiedzi, to albo zapisujesz, że dany identyfikator wysłał odpowiedź albo (prościej) usuwasz identyfikator z listy. A na wejściu sprawdzasz, czy identyfikator nadal jest na liście, jeśli nie, to pokazujesz wiadomość, że zły identyfikator lub identyfikator już głosował.