No existe un metodo 100% seguro para evitar que alguien se te meta, lo unico que puedes hacer es complicarle las cosas a un atacante....
Una sesion es facil de encriptar (http://phpsec.org/projects/guide/1.html), y mas aun si dejas una variable obvia como "id" o "login" o "nivel", asi que lo usual ahora es crear un numero aleatorio (token) y guardarlo en la base de datos junto con los datos sensibles, despues al inicio de tu script solicitas ese token y lo comparas contra la base, asi puedes saber si la sesion es valida y que nivel tiene el usuario
Precisamente tengo una pregunta abierta sobre ese tema (http://www.forosdelweb.com/f18/llamada-duplicada-header-964815/), aqui te dejo lo que llevo de la rutina de comprobacion de seguridad, aun esta en desarrollo pero te puede servir para que te des una idea....
Código PHP:
if (!seguridad()) {
// Cierra la sesion y regresa a pagina de inicio
session_destroy();
$dir='entrar.php';
header("Location: $dir");
die();
}
Código PHP:
// ***************************************************************************************
// seguridad.- revisa que el usuario y su sesion se encuentren activas
function seguridad() {
if(!isset($_SESSION['token'])) {
global $self;
$ipv4 = sprintf("%u", ip2long(getenv('REMOTE_ADDR')));
// Guarda variables en la lista negra para analisis posterior
$bd=Db::getInstance();
$sql="INSERT INTO config_listanegra (ip,intento,usuario,clave)
VALUES ('$ipv4','0','$self','null')";
$bd->insertar_dato($sql);
return FALSE;
} else {
return TRUE;
}
}