Question

Nous avons une application héritée (mélange d'ASP classique et ASP.net) qui a quelques attentes de contenu Ajax riche pages.The est que les utilisateurs du site effectue une série de tâches sur la page qui peut couvrir un montant équitable de temps dire 15-30 minutes.

L'une des conditions est que les utilisateurs se connectant sur le site soit automatiquement déconnecté après 15 minutes d'inactivité. Ceci est actuellement réalisé en utilisant les balises meta pour rediriger l'utilisateur vers la page de fermeture de session après 15 minutes d'inactivité dans la page.

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

Le problème que nous avons est que le navigateur ne marche pas pense qu'il ya eu une activité sur la page malgré de nombreuses interactions avec le serveur AJAX. Ainsi, après les 15 minutes de ce que le navigateur pense que l'inactivité, l'utilisateur est connecté automatiquement, même si elles sont en train de faire quelque chose.

Inspiré par cette nous tenté de corriger l'ennui en utilisant javascript (JQuery) comme si

Le ci-dessous serait un gestionnaire d'événements tels que cliquant de la sauvegarde sur la page, etc. pour la simplicité est ici la charge de page pour modifier le temps de rafraîchissement à 5 secondes

$(document).ready(function() {
    var selector = 'meta[name=Refresh]';
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
});

Le but étant (re) mettre le contenu de la balise meta refresh la page minuterie serait remise à zéro. Malheureusement, cela ne marche pas semble fonctionner (dans IE).

Comme il est une application héritée, certaines des décisions à savoir d'utiliser des balises méta etc. sont cuits au four. La question est, est-il un moyen d'obtenir meta refresh tag pour coexister pacifiquement avec une application Ajax? Est-ce que je fais quelque chose de mal et est-il un moyen de résoudre ce problème?

Était-ce utile?

La solution

en supposant que vous utilisez quelque chose comme jQuery cela pourrait fonctionner. Je ne l'ai pas testé et ne sais pas si les navigateurs lire la balise meta dans un élément noscript dans la tête de document.

Remplacez votre balise meta par ceci:

<script type="text/javascript">
    window.onload = function(){
        var timer = null,
            time=1000*60*15, // 15 minutes
            checker = function(){
                if(timer){clearTimeout(timer);} // cancels the countdown.
                timer=setTimeout(function() { 
                    document.location="/someurl/logout.asp";
                },time); // reinitiates the countdown.
            };
        checker(); // initiates the countdown.
        // requires jQuery... (you could roll your own jQueryless version pretty easily though)
        if(window.jQuery){
            // bind the checker function to user events.
            jQuery(document).bind("mousemove keypress click", checker);
        }
    };
</script>
<noscript>
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
</noscript>

Il y a de meilleures façons certainement de le faire. Comme service de 2 pages ... un pour les utilisateurs avec javascript et un sans.

Ou simplement désactiver l'application pour les personnes sans javascript. : O)

Modifier selon cette page: http://www.google .com / support / forum / p / Webmasters / fil? tid = 25c023fea4ea60a4 & hl = fr le meta refresh devrait fonctionner dans l'élément noscript.

Autres conseils

Je ne pense pas qu'il y ait un moyen d'arrêter le meta refresh. Vous pouvez modifier la balise meta, mais le navigateur a déjà décidé qu'il va rafraîchir en 15 minutes; il n'y a pas d'API pour arrêter cela.

Si vous ne pouvez pas arrêter le rafraîchissement ou utiliser JavaScript pour faire la redirection, vous pouvez contenir peut-être les dégâts:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top