Сессия хранится на сервере. Как вариант можно сделать так:
1. У пользователя есть сессия, рассчитанная на N минут.
2. Когда пользователь делает что-то на сайте (переходит по ссылкам, пишет в комментарии и т.п.), т.е. он онлайн, вы обновляете жизнь сессии.
3. Когда пользователь закрывает вкладку, сессия остаётся на сервере. Не забываем про 1-2 пункты.
4. Как только пользователь зашёл снова на сайт через N минут, то проверяем, есть ли время хранения сессии этого пользователя. Если нет, то удаляем сессию. А если же есть, то снова перезаписываем.
Так же, в дополнение, можно добавить CRON. Он чекает сессии, и если время жизни сессии меньше, чем время сейчас+N минут/секунд (пункт 1), то удаляет её. Иначе не трогает.
Как то так. Надеюсь мой ответ подтолкнёт к чему-то большему!