А как ты выявляешь факт устаревании сессии? Ну пусть какой-то такой факт есть. Скажем это время - пусть сессия выделяется на 5 часов (сразу прикинь на каком типе ресурсов это окажется незаменимым
) и факт нажатия на ссылку "выход". В любом случае перед уничтожением сессии опустоши в таблице поле этой сессии для конкретного пользователя, по той логике, что была предложена выше это означает, что сессия закрыта. Еще ко всему, каждый раз когда делаешь это опустошай (и удаляй сессии PHP) поле сессий которые зарегестрированы более 5ти часов назад. Для этого достаточно выполнить всего два запроса.
Для шага (а)
Код:
UPDATE `users` SET `s_id` = '' WHERE `u_id` = какой_то_там
Для шага (б)
Код:
UPDATE `users` SET `s_id` = '' WHERE `s_init_time` < (CURRENT_TIMESTAMP() - 18000)
Причем следует знать, что первый в таблице столбец типа
timestamp означивается в операциях INSERT, UPDATE текущей датой в том случае, если он явно не указан в этих операциях (есть еще уточняющие моменты, но их можно найти в мануале). Это нам не мешает, а даже наруку.