Simple and underrated. One small tweak: update last_seen_at at most once per hour or per session, otherwise every request becomes a write. Pairing it with a last_core_action_at column also helps separate people who log in and look around from people who still do the thing the product is for.
StackShortlist