Если вы не используете куки-файлы для сохранения информации для входа в систему ваших пользователей, должен выйти из системы, когда они закрывают браузер, потому что любые куки-файлы сеанса должны быть уничтожены при закрытии браузера.
Очевидно, что это не всегда так ( см. Здесь пример сохранения Firefox информации для входа в систему после выхода из системы), потому что функции «восстановления сеанса» теперь стирают грань между тем, что считается «одиночным» браузерная сессия ". (Лично я думаю, что это должно быть классифицировано как ошибка, но это только мое мнение).
Есть два возможных метода. Первым было бы (как упоминал yojimbo87 до меня) использовать веб-сокеты для поддержания соединения между клиентом и сервером, а когда сокет закрывается, завершить сеанс. Проблема здесь в том, что поддержка веб-сокетов ограничена и, конечно, невозможна ни для чего, кроме самых современных браузеров (FF4, Chrome, IE9 и т. Д.).
Альтернативой может быть использование AJAX для постоянного опроса сервера, чтобы сообщить ему, что страница все еще просматривается, поэтому, если, например, вы отправляете запрос подтверждения активности через AJAX каждые 30 секунд, вы сохраняете отметка времени запроса в сеансе. Если пользователь затем вернется на страницу, а разница во времени между текущим запросом и последним запросом превысит, скажем ... 45 секунд (с учетом задержки), вы будете знать, что пользователь закрыл свой браузер и ему необходимо войти снова.
Однако в обеих этих ситуациях есть фатальный недостаток, заключающийся в том, что они полагаются на JavaScript. Если у пользователя не включен JavaScript, вы в конечном итоге нарушите работу пользователя постоянными приглашениями, что, очевидно, является плохой идеей.
По моему мнению, разумно просто полагаться на то, что сессионные куки удаляются браузером, когда пользователь закрывает окно браузера, потому что именно это они и должны делать. Вы, как разработчик, не можете быть обвинены в том, что браузер клиента ведет к нежелательному поведению, поскольку он полностью не в ваших руках, и функционального обходного пути нет.