Witaj, na pierwszy rzut oka wszystko wygląda okej, zastosowałeś “session_regenerate_id();” oraz sprawdzanie czy IP jest to samo - w tym przypadku należy wziąć pod uwagę userów mobilnych gdzie często może im się zmienić IP po przełączeniu do innego nadajnika, dlatego może warto sprawdzić jeszcze UserAgent całe przed zniszczeniem sesji ? albo dać oba zabezpieczenia.
W sesjach najgroźniejsze jest to gdzie je trzymamy, dlatego koniecznie zmień folder do przetrzymywania sesji z katalogu domyślnego na jakiś własny najlepiej poziom wyżej niż strona