porque la seguridad a través de cookies es nula. Fácil de burlar para quien sepa hacerlo, ya que usuario y contraseña viajan en cada petición.
Con sesiones también se usan cookies, pero la cookie solamente contiene un identificador único que referencia a un archivo de datos que está en el servidor, por lo que el usuario no tiene forma de falsearlo. Es MUCHO más seguro
Con respecto a mysql_fetch_*, las diferencias son:
*_row: crea un vector con índices numéricos
*_assoc: crea un vector cuyos índices son cadenas
*_array: crea ambos tipos de índice (o el que se especifique, dependiendo de el segundo parámetro opcional)
Según el sentido común, el más rápido es mysql_fetch_row. El manual dice que la diferencia de rendimiento entre _row y _assoc es despreciable, por lo que resulta más cómodo usar mysql_fetch_assoc.
Igual nunca he visto pruebas de rendimiento, así que no puedo afirmar esto con pruebas.
Saludos.