A co jeszcze chcesz zabezpieczać? Hash powinien być na tyle długi, żeby nie dało się go w prosty sposób odgadnąć. Poza tym sesja powinna działać na zasadzie tokenów:
1. dostajesz token na 1 zapytanie
2. Jak wykonujesz zapytanie i podany token się zgadza, to generuje Ci nowy token
3. Wróć do pkt. 1
Do realizacji powyższego najlepiej użyj natywnego mechanizmu sesji + funkcji
session_regenerate_id.