function reGenerateUID() { $old_uid = $this->client->uid; // pobrane z cookies $new_uid = $this->client->generateUID(); // tworzy nowe z uniqid(mt_rand(), true) { $stmt = $this->db->prepare('UPDATE sessions SET uid=:new_uid, timestamp=now() WHERE uid=:old_uid'); $stmt->bindParam(':new_uid', $new_uid, PDO::PARAM_STR, 33); $stmt->bindParam(':old_uid', $old_uid, PDO::PARAM_STR, 33); $stmt->execute(); $stmt->closeCursor(); $this->client->uid = $new_uid; return true; } return false; }
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.