C'est quasiment impossible de tomber "par hasard" sur un id de session en essayant de le bidouiller.
Tu as déjà une protection assez importante pour peu que tu n'autorise pas le passage d'id de sessions en GET ou POST (vérifie que tu as bien session.use_only_cookies à 1 dans ton php.ini).
Après si quelqu'un a accès à ton PC (physiquement ou avec un spyware), ou si il observe ton réseau et que ton site n'est pas en HTTPS, il peut récupérer ton id de session et le détourner de son côté. En général on régénère l'id de session à chaque chargement de page (session_regenerate_id), ça limite la portée de l'id si il est détourné, puisque si quelqu'un venait à récupérer ton id de session, pour peu que tu navigue sur le site il serait régénéré assez fréquemment (donc ça invaliderait l'id volé).
Quoi qu'il en soit si tu veux une sécurité """optimale""", tu peux gérer tes sessions à la main, en utilisant un cookie de session que tu génère en concaténant un uniqid avec l'user agent et l'ip du client (et pourquoi pas rajouter le pseudo et le hash du mdp pour un utilisateur connecté), le tout crypté avec un salt dans un algo décryptable (rijndael par exemple). À chaque requête tu récupère le cookie de session, tu le décrypte, et si tu récupère bien l'user agent, le pseudo / hash du mdp et que tout correspond, tu ne devrais pas avoir à t'inquiéter. Sinon c'est potentiellement une tentative d'hijack, donc tu détruit le cookie et la session.