1) Questo tempo può essere aumentato. Ma devi avere in mano la gestione del server web. Non ricordo se la cosa va cambiata nel file php.ini o in httpd.conf (direi + il primo ma non sono proprio sicuro).

2) Sono d'accordo con te.

io solitamente faccio un file chiamato authenticate.inc.php

codice:
if ($_SESSION['logstatus']!=1) {
  $_SESSION['messaggio']="Non sei autorizzato a visitare questa area del sito.";  header("location:index.php?cmd=messaggio");
}
?>
e una di login

codice:
include('include/connect.inc.php');
$user=$_POST['user'];
$pass=$_POST['pass'];
$sql = mysql_query("SELECT * FROM users WHERE username='$user' LIMIT 1");
$sql_string = mysql_fetch_array($sql);
$numrows = mysql_num_rows($sql);
if($numrows != "0" && (md5($pass) == $sql_string["passwd"])) {
$_SESSION['logstatus']="1";
} else {
$_SESSION['logstatus']="0";
}
header("location:index.php");

Come puoi vedere se il login avviene correttamente la variabile di sessione logstatus verra impostata ad 1 altrimenti a zero.

Tutto quello che dovrai fare sarà far partire la sessione con

session_start() e includere il file authenticate.inc.php in ogni pagina da proteggere.

ciao