In genere sono ragionevolmente sicure. MA...
Se sei su hosting condiviso e se il server non è perfettamente configurato, possono essere altamente insicure.
Questo perché su hosting condiviso è possibile che tu divida il server con un altro utente. Questo utente può usare le sessioni nello stesso tuo modo (inconsapevolmente oppure per attaccarti volontariamente).
SE il Server non divide il path dove registra le sessioni a seconda degli utenti, succede che le sessioni sono salvate in un unico calderone. Un malintenzionato può loggarsi nell'altro sito, sfruttare l'id di sessione, crearsi un cookie per il tuo usando l'id dell'altro ed il gioco è fatto. Ovviamente se tu usi chiavi di sessioni molto banali (autenticato=1, admin=1 ecc) è tutto piu' semplice.

E' difficile che al giorno d'oggi un sistemista di un hosting (decente) non stia attento a questo... ma non si sa mai. =)


se imposti il name di una sessione aumenti di un livello la tua sicurezza.
Oppure ancora puoi non usare direttamente le chiavi ma un array, in modo da poter complicare il tutto, es:

Codice PHP:
$_SESSION['miaparolasegreta']['admin']=1
in questo modo se non esiste l'array $_SESSION['miaparolasegreta'] distruggi la sessione e richiedi il login perché probabilmente qualcuno si è creato la session "da un'altra parte".
Se utilizzi un database ancora meglio dovresti evitare cose tipo: admin=1, ma puntare a un id (meglio RID) di un utente salvato nel database.

Ripeto: è pignoleria, perché dovrebbero verificarsi troppi "SE" per poter fare un attacco del genere... ma non si sa mai, no?