Уничтожение сеанса и пользовательских данных при закрытии браузера (PHP) - PullRequest
3 голосов
/ 20 декабря 2011

Я знаю, что этот вопрос задавали много раз, как отслеживать пользователей онлайн на сайте с помощью php, что я делаю, это очень просто, если пользователь заходит на мой сайт, я сохраняю его данные в базе данных, и как только они нажмите кнопку «Выйти», я уничтожаю их сеанс и удаляю это имя пользователя из моей базы данных.

Настоящая проблема возникает, когда пользователь непосредственно закрывает браузер, потому что у меня нет возможности выполнить запрос mysql к моей базе данных, и похоже, что он все еще вошел в систему, хотя это не так.

Я не хочу устанавливать какое-либо время для уничтожения файлов cookie или сеансов, потому что это неправильный способ сделать это, скажем, я установил время на 30 минут, а пользователь закрыл браузер всего за минуту, поэтому на 29 минут он появится в сети, поэтому я этого не хочу.

Спасибо

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Используйте веб-сокет, т. Е. http://html5demos.com/web-socket, когда ваш пользователь закроет браузер, соединение будет прервано, затем вы установите его в автономный режим, но оно будет работать только в современных браузерах.

Однако вы все равно можете сделать что-то вроде веб-сокета, используя push-stream для мониторинга ваших пользователей.

Но, если вы используете сеансы, вы можете настроить отключение таймера в то же время, когда сеанс отключается. PHP по умолчанию 15 минут (вы можете настроить). Так что, если ваш пользователь будет держать ваш сайт открытым к этому времени, но не будет делать запросы, по истечении этого времени его сеанс будет закрыт, даже если браузер все еще открыт.

2 голосов
/ 07 марта 2012

Есть лучшее решение, используйте JavaScript для отправки AJAX-запроса на ваш сервер по событию "onBeforeUnload".Таким образом, сценарий будет гарантировать, что сеанс и запись в БД удаляются только при выходе пользователя с веб-сайта.

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        $.ajax({
          url: /controller/action/clear
        });
    }); 
</script>
1 голос
/ 20 декабря 2011

Вы также должны хранить время, когда пользователь перезагрузил страницу. после аутентификации, после нажатия какой-либо ссылки или чего-то еще, вы должны сохранить / обновить в базе данных все эти действия.

после этого вы должны убедиться, что, если пользователь зашел на сайт или перезагрузил страницу около 15 минут назад, он не в сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...