При чём здесь куки? У вас есть сессии, вот в них всё и пишите. На успешном логине записываете logged_in = true, можете ip записать в сессию для пущей безопасности. На каждом запросе смотрите в эти самые сессии и сверяете ip запроса с ip в сессии, если сменился разлогиниваете.
Ваши поделки с хешами уже решены в сессиях. И cron-a никакого не надо, выставляете таймаут сессиям который хотите и сессионная кука сама удалится.
По секрету скажу, что сессии по дефолту хранятся в файлах на жестком диске, поэтому выборка данных из сессии будет не быстрее, чем выборка данных из БД. Поэтому не стоит пытаться оптимизировать то, в чём не разбираетесь.