Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szybkie odświeżanie strony - gubi wartości
Forum PHP.pl > Forum > PHP
sulewski
  1. function reGenerateUID()
  2. {
  3. $old_uid = $this->client->uid; // pobrane z cookies
  4. $new_uid = $this->client->generateUID(); // tworzy nowe z uniqid(mt_rand(), true)
  5. if (setcookie("UID", $new_uid, time()+(3600*24*365), "/"))
  6. {
  7. $stmt = $this->db->prepare('UPDATE sessions SET uid=:new_uid, timestamp=now() WHERE uid=:old_uid');
  8. $stmt->bindParam(':new_uid', $new_uid, PDO::PARAM_STR, 33);
  9. $stmt->bindParam(':old_uid', $old_uid, PDO::PARAM_STR, 33);
  10. $stmt->execute();
  11. $stmt->closeCursor();
  12.  
  13. $this->client->uid = $new_uid;
  14.  
  15. return true;
  16. }
  17. return false;
  18. }


W cookies przechowuję unikalny identyfikator, na podstawie którego sprawdzam w bazie danych, czy użytkownik jest zalogowany (taka własna implementacja sesji).
Funkcja jest wywoływana za każdym razem, zaraz po sprawdzeniu, że użytkownik jest zalogowany - odpowiednik session_regenerate_id().

Problem jest taki, że jeśli jako zalogowany użytkownik szybko odświeżam stronę (F5), to po kilku razach w cookie mam inny UID niż jest w bazie - i zostaję wylogowany. Jeśli odświeżam w normalnym tempie, wszystko działa poprawnie.
thek
Więc zabezpieczaj się przed zbyt szybkim regenerowaniem poprzez znaczniki czasu choćby. Jeśli nastąpiło przejście zbyt szybko to nie regenereuj. Dane te możesz choćby w cookies przechowywać i zmieniać skoro już ich używasz lub po stronie serwera to sprawdzać. Zbyt szybkie reakcje usera - nie regeneruj smile.gif Mozna powiedzieć, że założyłbyś locka na określony czas.
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.