2012-02-17 31 views
5

Najłatwiej jest opisać mój problem za pomocą działającego przykładu: nawet jeśli nie jesteś zalogowany, YouTube zapamiętuje to, co oglądałeś, a następnym razem wyświetli sugestie oparte na wcześniej oglądanych filmach.W jaki sposób ułatwić zapamiętanie głosowania za pomocą plików cookie?

Moja strona jest podobna w pewnym sensie: użytkownicy mogą głosować na artykuły bez logowania, a strona zapamiętuje głosy za pomocą plików cookie. Wymyśliłem metodę pracy, ale musi być łatwiejszy sposób - również teraz użycie DB jest zoptymalizowane.

Dla każdego odwiedzającego istnieje sprawdzenie, czy ma pliki cookie. Jeśli tak, sprawdzam jego głosy. Jeśli nie, tworzę fikcyjnego użytkownika i wysyłam mu ciasteczka. Teraz przechowuję znacznik czasu "last_visit" tego użytkownika. Po tym wszystkim wszystko jest takie samo dla obu użytkowników. Mój problem polega na tym, że mój DB zapełnia się fikcyjnymi użytkownikami, więc moje pliki cookie wygasły w ciągu 3 miesięcy, a moja witryna regularnie sprawdza, którzy użytkownicy nie odwiedzili mojej witryny w ciągu ostatnich 3 miesięcy, i usuwa je z bazy danych.

Wiem, że to zawikłałem, ale mój system głosowania używa AJAX, i nie mogłem znaleźć metody wysłania cookie (i stworzenia manekina) tylko wtedy, gdy głosuje, a nie za każdym zwykłym gościem przeglądam moją stronę - bez głosowania.

Uwaga: Nalegam na używanie plików cookie - Wiem, że łatwiej byłoby przechowywać IP-y, gdy odbywa się głosowanie, ale są szkoły, firmy używające tego samego adresu IP i lubię pozwalać użytkownikom na korzystanie z nich moja strona.

Za czym tęskniłem? Jak można to zoptymalizować?

Odpowiedz

1

jeśli nie posiadają one stałego konta, dlaczego przechowują wszystko, co jest związane z nimi w bazie danych? po prostu zapisz swoje wcześniejsze głosy w pliku cookie. przechowujesz również głosy w bazie danych, ale anonimowo, a nie odnoszą się one do "użytkowników" w ogóle.

+0

Powinienem o tym wspomnieć: moja witryna zawiera sugestie oparte na głosowaniach, takie jak: "kto głosował nad tym również głosował nad tymi słowami", więc jakoś połączę głosy w DB. Obecnie używam do tego użytkowników (manekiny lub prawdziwi użytkownicy). – ZTefter

+1

@ZTefter Got to. Trochę trudniejsze. Nadal można rejestrować, kto głosował za co przez losowy hash lub coś zapisanego w pliku cookie. Po prostu dołącz hasz do rekordów głosowania, ale w rzeczywistości nie twórz rekordów użytkowników. – dqhendricks

+0

OK, dziękuję, myślę, że spróbuję tego. Ale nadal utknąłem w części do tworzenia plików cookie. Głosowanie to funkcja AJAX javascript, która wywołuje plik PHP z parametrami. Teoretycznie ten PHP powinien stworzyć ciasteczko, które byłoby najlepsze, ale nie mogłem tego osiągnąć. Czy to rzeczywiście możliwe? Czy to jest właściwy sposób na zrobienie tego? – ZTefter

Powiązane problemy