Контролируйте действия пользователя с помощью jQuery - PullRequest
3 голосов
/ 25 мая 2010

Я хочу написать javascript, который будет уничтожать sestion на веб-странице, если пользователь в течение некоторого времени не предпринимал никаких действий по настройке. Как я могу узнать, что пользователь не совершал никаких действий с помощью jQuery.

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 25 мая 2010

Вы можете перехватить события mousedown и keydown для всего документа, а затем настроить тайм-аут на запуск, если события не инициируются в течение определенного периода времени:

<html>
  <head>
    <script type="text/javascript" src="jquery-1.4.2.min.js"></script>

    <script type="text/javascript">
        var _idleEventId = null;
        var _idleMaxMilliSeconds = 10000;

        function OnIdle() {
            alert('You\'re idle!');
        }

        $(document).bind("mousedown keydown", function() {
            clearTimeout(_idleEventId);
            _idleEventId = setTimeout(OnIdle, _idleMaxMilliSeconds);
        });

        $(document).ready(function() {
            _idleEventId = setTimeout(OnIdle, _idleMaxMilliSeconds);
        });
    </script>
  </head>
  <body>
    Hello World
  </body>
</html>
2 голосов
/ 25 мая 2010

как использовать cookie на всякий случай: http://www.w3schools.com/JS/js_cookies.asp

тогда я бы хотел это

ПРИМЕЧАНИЕ: просто доказательство концепции не проверено!

setInterval("checkForActivity()", 5000); //set a reasonable time..

function checkForActivity() {
    var user_has_moved_at = (new Date()).getTime(); //generate a time
    var time_elapsed = getCookie( COOKIE_NAME ); //get a time from previous stored
    //check how many time is passed from last move
    if ( ( user_has_moved_at - time_elapsed ) < 3600 ) { 
     //less then 1 hour.. user is still here..
        $(document.body).bind('mousemove',
        function() {
         // so update the fresh air...
            setCookie( COOKIE_NAME , user_has_moved_at);
         // unbind event
            $(document.body).unbind('mousemove');
        });

    } else {
     // more then 1 hour... destroy cookie... user is out
        setCookie(COOKIE_NAME, null); //destroy cookie
    }

};
1 голос
/ 25 мая 2010

Чтобы убедиться, что пользователь ничего не делал, вы можете наблюдать за событиями, которые означают взаимодействие с пользователем:

var last_seen = 0;
var timeout = null;
$('body').mousemove(function () {
  last_seen = (new Date()).getTime();
  window.clearTimeout(timeout);
  timeout = window.setTimeout(clear_da_session, 10000);
});
/* ...  and likewise for things like
   $('input').focus();
   $('a').click();
   and 'keypress' events
*/

Материал clearTimeout и setTimeout заботится о том, что происходит (то есть функция clear_da_session) после некоторого времени, когда не было запущено ни одно из перечисленных событий.

Однако я хочу еще раз подчеркнуть свой комментарий сверху: не делайте этого дома, дети! Используйте любой ваш серверный язык на борту. Это гораздо надежнее, чем пытаться отследить что-то, что может быть невозможно отследить.

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