Aca esta tu respuesta para el punto 2: (basada en un post de Cluster sobre sesiones en las FAQ).
Código PHP:
$urls[] = "http://www.pepe.com";
$urls[] = "http://www.pepe1.com";
$urls[] = "http://www.pepe2.com";
srand ((float) microtime() * 10000000);; //sembramos la semilla de numero aleatorios
//shuffle ($urls); // desordenamos el array
session_start(); // incio de uso de sesiones.
$urlanterior = $_SESSION['ultimaurl']; // tomamos de la sesion la ultina url publicada
$urls = array_diff($urls, array($urlanterior)); // quitamos $urlanterior en la lista de urls
$indicealeatorio = array_rand($urls); // tomamos un indice aleatorio
$_SESSION['ultimaurl'] = $urls[$indicealeatorio]; // registramos la nueva url en la sesion
$urlalazar = $urls[$indicealeatorio]; // esto es una url al azar que no se 2 veces.
echo nl2br("Anterior: $urlanterior\nAl azar: $urlalazar");
http://www.php.net/array_diff http://www.php.net/array_rand