Здравствуйте, zappy, Вы писали:
П>>Правда, такое решение не очень секьюрно — адрес с id сессии может остаться в выпадающем списке адресной строки браузера.
Z>Да, это точно =) Z>А можно ли как-нибудь завершить текущую сессию сразу после закрытия, а не ждать таймаута??
Ну разве что как-то очень хитро извратиться. Если очень нужно, то вот, например, какой способ приходит в голову. У каждого окна (в том числе у каждой вкладки) имеется такой аттрибут, как window.name. Он не меняется при перезагрузке содержимого, но потеряется при закрытии вкладки. Поэтому нам надо суметь запихнуть сессию в него.
1. Может быть, придется реализовать некий свой механизм сессий (хотя может и удастся сделать все это на стандартном).
2. id сессии запихиваем в window.name яваскриптом при первой загрузке страницы (при повторной обнаруживаем, что window.name уже установлен и не трогаем его).
3. Часть содержимого страницы, требующую проверку сессии, грузим с помощью AJAX, передавая в запрос id сессии, выколупанный из window.name.
При закрытии вкладки window.name теряется, и сессию обратно не восстановить.
Но я бы не стал все это делать без явной необходимости. Есть много сайтов, где предусмотрено разлогинивание по окончанию работы с сайтом. При этом везде разлогинивание происходит при закрытии браузера, а не вкладки. Вполне стандартная схема, нормально работает и выполняет свою задачу, все к ней привыкли. Я бы не стал от нее отклоняться, если только у сайта действительно нету какой-то важной особенности, требующей другой схемы разлогинивания (но я пока что такую особенность даже гипотетически придумать не могу)