Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie ;-)
Forum PHP.pl > Forum > PHP
wallace
mam taki o to problem ... jest sobie baza danych X i tam tablica A i B... w tablicy A mam identyfikator zdjecia i liczba glosow na nie oddanych, natomiats w tablicy B ip osoby ktora oddala glos... jesli dana osoba odda glos na dane zdjecie w tablicy A zwieksza sie dla danego zdjecia o danym id liczba glosow o 1 ... natomiast do tablicy B dopisywany jest ip danej osoby ktora zaglosowala ... w nastepstwie jesli dana osoba chce zaglosowac jeszcze raz przed oddaniem glosu kolejnego sprawdzam czy w tablicy B istaniej ip danej osoby ... jesli tak to nei powinno to sie jej udac ... a problem tkwi w tym, ze jelsid ana osoba glosuje pierwszy raz i wcisnie po kliknieciu na link 'zaglosuj' kilkanascie razy 'odswierz' to zliczy jej dodatkowe glosy ... jak sie przed tym ustrzec ? mam nadzieje, ze w miare zrozumiele opisalem problem :-) mam cos kombinowac z funkcja flush? dzieki za odpowiedz z gory :-)
PMadej
zrób tak że formularz który służy do głosowania będzie w jednym pliku powiedzmy plik1.php a będzie się on odnosił do drugiego powiedzmy plik2.php. W drugim pliku będzie skrypt który ma aktualizować bazę danych i nic nie wyświetlać i tam po aktualizacji bazy danych dodaj linijkę:

[php:1:7ff26e336e]<?php
header('Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/plik1.php");
?>[/php:1:7ff26e336e]

użytkownik nawet nie zauważy tego, że została otworzona nowa strona a głos zostanie naliczony tylko jeden
wallace
wlasnie cos w tym rodzaju mam teraz, a i tak nie dziala dokonca tak jak powinno ... mecze siem dalej .. dzieki :-)
jono
[php:1:90de7f80ac]<?php
if(!$_COOKIE['juzbyl']){
// wsadzanie do bazy

setcookie('juzbyl', TRUE);
}

header('Location:
http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/plik1.php");

?>[/php:1:90de7f80ac]
Jeżeli korzystasz z sesji, lepiej zapisz w sesji, bo nie każdym ma cookies..
wallace
no cookies to nienajlepszy w tym przypadku pomysl ... natomiast sesje? a czy dana sesja nie znika po jakims okreslonym czasie ? hmmm .. poczytam :-)
w kazdym razie po przeslaniu w miejsce docelowe dziala mi juz (chyba ;-)) dzieki za odpowiedz :-)
shw
a nie mozesz przy dodawaniu sprawdzac czy dane ip juz glosowalo i jezeli tak, to nie dodawac glosu?
nie rozumiem problemu...
jono
chodzi o ludzi ze zmiennym IP smile.gif Ale Myślę, że powinieneś zrobić tak:

1) Zapisz IP do bazy
2) Spróbuj zrobić cookie

No i to powinno załatwić 90% petentów smile.gif
wallace
zle mnie zrozumieliscie ... przy robieniu "flooda" na skrypt zliczajacy glosy wykonujac skrypt za pierwszym razem dodawal glos, a nie zdazyl wpisac do bazy, ze juz taki ktos gloswal jak drugi raz wywolany ten sam skrypt dodawal kolejnby glos ... tak to sobie tlumacze ... lokalnie na kompie cos takiego wsytepowalo ... jak wyslalem w miejsce docelowe juz bylo ok ...

z drugiej strony o ile wiem jak to wszystko dziala nei powinno sie tak dziac... chociaz ...
z innej strony widzialem gdzies w manulu jakas funkcje opozniajaca o x sekund lub milisekund wywolanie skryptu przez danego uzytkownika... ale to bylo dawno i nie ejstem pewien czy nei mam jakis zwidow ... tym bardziej, ze manualu nie moge znalesc tej funkcji... pozdrawiam
adwol
[php:1:8bb0cb11c8]<?php
ignore_user_abort(true);
?>[/php:1:8bb0cb11c8]
To Ci spowoduje, że skrypt wykona się do końca nawet jak w połowie przeglądarka rozłączy się z serwerem (co ma miejsce gdy ktoś szybko naciśnie przycisk ,,Refresh''). W tym momencie masz pewność, że skrypt wykona wszytkie instrukcje włącznie z zapisaniem w bazie, że z tego IP już głosowano.
Kinool
zasadnicze pytanie czy masz baze userow questionmark.gif tzn czy glosowanie na twojej stronie jest anonimowe czy trzeba sie zalogowac i wtedy glosowac?? jezeli masz baze userow to ja rozwiazalem to tak: w tabeli np. grafika mam kolumne glosy_od i wpisujesz tam np. id uzytkownika jaki oddal glos oddzielasz je np ":" po to zeby potem zrobic exploda i miec tablice z uzytkownikami ktorzy juz glosowali jesli to masz to robisz porownanie z z danymi z formularza tzn. sprawdzasz czy dany id usera (jaki wyslal glos) isnieje w tablicy (np. poprzez in_array() ) jesli tak to wyswietlasz mu stosowny komunikat jasli nie to zaliczas glos i wpisujesz id useraz w glosy_od smile.gif

no jesli nie uzywasz logowani i kazdy moze glosowac to boze by bylo zeby np. ludzie ze zmninnym IP byli jakos filtrowani to zapisac IP i np. wersje systemu jak uzywa potem porownac IP jesli jest istnieje w bazie to sprawdzic czy wersja przegladrki i systemu jest taka sama jak w bazie jesli tak to jest wieksze prawdopodobienstwo ze ta osoba nie glosowala.

przechowuwani w cooki ma wile wad (usuniecie cooki lub wylaczenie jego w przegladarce) powoduje ze mozna nieskonczenie wiele razy oddawac glos, wiec jesli zalezy ci na tym aby glosy sie nie powtarzaly to nie mozesz tego przechowywac na kompie klienta
wallace
adwol dzieki :-) wlasnie o to mi chodzilo :-) pisze chyba zbyt filozoficznym jezykiem aby byc dobrze zrozumianym ;-)
uwazam temat za zamkniety :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.