Anioool
9.07.2008, 09:26:33
Witam:)
Mam na stronie wyświetlani jakiś wypowiedzi i jest pole ocena gdzie są możliwości oddania oceny dodatniej i ujemnej... Wszystko jest przechowywane w bazie danych... I teraz jak to zrobić aby użytkownik jak raz zaglosuje nie mógł już głosować?? Dodam że mam otwieraną sesje przy wejściu na stronę, lecz użytkownik anonimowy jest nim nadal tylko potem po logowaniu sesja jest uzbrajana..
zukowskp
9.07.2008, 09:32:14
a kontrola ip nie wchodzi w gre?
jeżeli nie jest to system głosowania do parlamentu, to wystarczy u usera założyć ciasteczko, ze już oddał głos. oczywiście jest to prymitywne i banalne do obejścia, ale w prostych zastosowanich zupełnie wystarczające
Shili
9.07.2008, 09:34:40
Tak naprawdę to się nie da - jeśli dajesz głosować gościom, to jest multum sposobów, żeby to obejść, jeśli zmieniłbyś na głosowanie dla zarejestrowanych - zawsze można założyć nowe konto.
Ustawiaj ciacho, a w bazie danych zapisuj adres ip głosującego. Przy głosowaniu sprawdzaj, czy ip się nie duplikuje, a ciacho nie jest ustawione. Oczywiście jest to bardzo zawodne, nie uwzględnia dynamicznych ip, może blokować głosowanie użytkownikom, którzy jeszcze nie głosowali i tak dalej.
krowal
9.07.2008, 09:35:12
Stwórz dodatkową tabelę z ocenami wystawianymi przez użytkowników z takimi polami jak:
- uzytkownik_id
- wypowiedz_id
- ocena
Zapisuj oceny w tej tabeli, a potem sprawdzaj czy użytkownik o konkretnym id głosował już na daną wiadomość i jeśli tak to nie pozwalaj na powtórne oddanie głosu.
[edit]
no chyba że nie ma kont użytkowników, wtedy pozostają sposoby podane powyżej
Anioool
9.07.2008, 10:11:20
Myśe właśnie nad ciastkiem ale przyznam się szczerze pierwszy raz pisze w php;) tak to tylko pisałem c++ i c# oraz Asp...
Użytkownicy nie mogą się rejestrować tylko odpowiednia grupa będzie rejestrowana(czyt. obsługa portalu)...
Jkabym mógł prosić jakieś wskazówki jak takie ciastko wstawić
Shili
9.07.2008, 10:15:59
google ukradli?
setcookie" title="Zobacz w manualu PHP" target="_manual dodatkowo (jeśli zaczynasz, to tym bardziej zwracam uwagę na nieocenioną pomoc jaką jest manual - zacznij sobie przyswajać posługiwanie się nim)
Anioool
9.07.2008, 10:31:20
Dzięki:) już dawno korzystam z tej stronki:)
A jeszcze jedno pytanie... w tych ciasteczkach jak przechowywać id tych tekstów?? i teraz jedno ciasteczko to jedno id czy moge mu zwiększać ilość danych w ciasteczku??
Shili
9.07.2008, 11:06:41
Nie polecam jednego ciastka, jednego id. W ciastku możesz zapisać do bodajże 4kB informacji - to musisz wziąć pod uwagę. Ilość ciastek dla jednej domeny też jest ograniczona.
Tak naprawdę musisz sobie to wszystko skalkulować - ile będzie tekstów do oceniania, ile średnio bajtów przypada na jeden identyfikator itd. Przyjmując, że będziesz miał kilkaset takich tekstów są to 3 bajty na identyfikator. Jakoś trzeba to oddzielić, czyli na przykład przecinkiem, potem robić na ciastku explode. Nie jest to oczywiście szczególnie wydajne, natomiast jest to tylko przykład. Musisz sobie oszacować co najbardziej Ci się opłaci docelowo itd.
3x999 + 1x999 <= 4kB, czyli zmieści się w jednym ciastku.
Mlodycompany
10.07.2008, 07:39:57
no tak ale jak ktos wyczysci ciasteczka z dysku to to i tak bedzie mogl glosowac, a glosowanie na ip tez nie jest do konca rozwiazaniem bo np. w neo ip sie z kazdym polaczeniem zmienia
dadexix
10.07.2008, 10:35:33
Ciągle mówicie że blokowanie IP się da obejść a nie myślicie też o tym że moze uniemożliwić? sieć lokalna itd...?
jeśli masz problem z ilością w ciasku - polecam baze + id, skrypt robi ciasto z jakimś ciągiem(np. sha1(microtime())

, sprawdza go w bazie czy głosował na tę stronę czy nie...
połaczenie sessji i cookie - sesja znika, w bazie nie zniknie, danych u usera też nie trzymasz tylko id...
możesz tez inteligentnie ukryć id dając jako nazwe cookie np. phpbb2mysql(domysle cookie phpbb by przemo)
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.