Я думаю, что то, что у вас есть, является концептуально правильным, однако я не думаю, что вы можете полагаться на срабатывание события session_end, поскольку это произойдет только в том случае, если пользователь посетит ваш сайт после истечения срока его сеанса, а не просто закроет браузер.
Возможно, вам также понадобится служба, которая работает довольно регулярно и удаляет элементы из таблицы сеансов по истечении определенного периода (вы можете захотеть, чтобы поле даты обновлялось при создании сеанса)./refreshed).
Не знаю, откуда взялся тупик, но я предполагаю, что вы что-то не закрываете должным образом ...