Koldy
15.10.2010, 12:20:22
Witam,
Mam sobie posty generowane dynamicznie, a w nich 2 linki do oceniania ich. Skrypt wykonuje ajax bez zbędnego przeładowania strony, wszystko działa pięknie, tylko muszę jeszcze zrobić jedną rzecz, a nie bardzo wiem jak.
Mianowicie, chciałbym zrobić tak, by za drugim naciśnięciem skrypt wywalał 'już głosowałeś na ten post' no i zastanawiam się czy osobna tabela była by do tego dobra.
Tabela z postem wygląda (a raczej jej dwie kolumny) tak: plus(int) | minus(int)
chciałbym to tego zrobić tabele:
[id][ip][username][postid]
Działałoby to na zasadzie że użytkownik, zalogowany bądź nie po naciśnięciu linku oprócz inkrementacji wartośći plus lub minus, doda do bazy swój wpis z ip, jeżeli jest zalogowany to nazwe użytkownika, oraz id postu na który głosował. Później skrypt jedynie będzie sprawdzał, czy to IP/user już głosował, jeżeli tak zwróć napis 'już głosowałeś'.
Wszystko pięknie i ładnie, ale czy to jest dobre rozwiązanie? nie zmuli mi strony przy większym ruchu?
Pozdrawiam Rafał.
krowal
15.10.2010, 13:25:21
To jest jedyne dobre rozwiązanie

ale ja bym dał możliwość głosowania tylko zarejestrowanym, inaczej można dużo łatwiej nadużywać tej opcji, chociażby przez zmianę proxy itp. Nie powinno to spowolnić bazy jeśli odpowiednio ustawisz indexy w tabeli, np. unique index na dwie kolumny user_id + post_id.
TheTester
15.10.2010, 13:49:06
Chciałbym tylko zauważyć, że takie rozwiązanie spowoduje, że osoby korzystające ze wspólnego IP (sieci osiedlowe czy nawet domowe), zostaną przyblokowane.
Najskuteczniejszym rozwiązaniem jest ograniczenie do zalogowanych użytkowników. Ale jeśli nie chcesz, to bym połączył IP z ciastkiem.
thek
15.10.2010, 13:52:50
Zawsze może też kombinować pod kątem user-agenta jesli chodzi o ludzi z tej samej sieci.
krowal
15.10.2010, 14:16:39
Przecież user-agent można zmienić jeszcze prościej niż IP
Koldy
16.10.2010, 11:49:51
okej, pomyślałem nad takim czymś. Gdy użytkownik jest niezalogowany pobierało z tej bazy kolumnę IP z pid, natomiast zalogowanemu pobiera uid i pid. Co myślicie o takim rozwiązaniu?
Teraz pewne pytania do was.
1. W internecie jest pełno stron takich, w których ocenianie jest dostępne bez logowania, moim zdaniem to plus, gdyż szersza społeczność to odbiera. Np. na demotywatorach nie bardzo chciało mi się rejestrować i długi okres nie oceniałem. (teraz już też tego nie robie.. ;O )
2. Jak ustawić indexy UNIQE na pid+uid? bo na jedno wiem, ale żeby były zależne od siebie to trzeba coś robić? (niezbyt dużo bawiłem się tym, to dlatego)
3. To jak z tym user-agent??
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.