Y a-t-il des façons d'ASP.NET pour récupérer des données du serveur sans prolonger le délai d'expiration de la session? Cela doit être fait toutes les quelques minutes sans interaction utilisateur tant que la page est fermée. P>
Contexte supplémentaire, comme demandé: p>
Les pages de mon webApp doivent interroger le serveur toutes les quelques minutes pour vérifier une condition particulière (maintenance d'urgence programmée pendant 30 minutes, dans ce cas). Lorsque la condition est vraie, la page affiche un message à l'utilisateur. Lorsque la condition est fausse, rien ne doit se produire. P>
Si je comprends bien, les post-retours au serveur réinitialisent l'heure à l'expiration de la session. Nous ne voulons pas que la session soit étendue / rafraîchie / réinitialisée / quel que soit le mot, chaque fois que la page interroge le serveur. J'ai besoin d'un moyen d'interroger le serveur automatiquement sans réinitialiser le délai de session. P>
Merci. P>
3 Réponses :
Si vous demandez dans le contexte d'une longue requête HTTP, de sorte que vous souhaitez empêcher un délai d'attente HTTP, consultez Web.config's S'il s'agit vraiment d'une question de délai d'attente de session, est-il possible de ping de manière asynchrone le serveur sous la même session utilisateur, tandis que le long processus est en cours d'exécution? p>
EDIT STRUT>:
Sur la base de votre édition, si vous partitionnez votre service Web "Maintenance du site Web" dans un service en dehors de la portée de la session de la partie normale du site, vous pouvez alors l'appeler aussi souvent que vous le souhaitez. Si vous utilisez un service Web ASMX dans votre site Web actuel à ce stade, par exemple, la partitionne simplement dans une application distincte, peut-être comme un répertoire éteint de votre application, de sorte qu'il tombe sous le même domaine. J'imagine que cela fonctionnerait bien. p>
Je ne sais pas quel type de service Web vous invoquez à ce stade (ASMX, WCF, etc.), ou même si le service Web que vous appelez à ce stade est dans la même application que votre ASPX pages d'application. p>
Premièrement, si une requête fonctionne au-delà de la limite de temps de la session, il y a un problème grave avec la requête. Je préférerais résoudre la requête d'abord. Toutefois, si vous souhaitez toujours le faire à l'aide de la session, essayez ceci:
Vous pouvez avoir un mannequin.aspx dans votre application, puis un élément d'image actualiser son URL toutes les 15 minutes comme: P>
<img id="dummyImage" src="/Dummy.aspx" width=0 height=0/> <script type="text/javascript"> var dummyImage = document.getElementById("dummyImage"); setInterval(function(){ dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000); }, 900000); </script>
En faisant le mannequin image.src = "dummy.aspx? .....", le navigateur émettra une demande d'obtention de cette URL, y compris également le cookie d'ID de session, et réinitialisera donc le délai de session.
Utilisez une minuterie JavaScript qui tire un appel Ajax. Donc, dans votre Cela continuera à vous appeler jusqu'à ce que l'utilisateur ferme la page. P>
Les sessions ne sont pas rafraîchies d'Ajax Hits. P> PAGELOAD CODE> ESCHO ECHO OUT UN JavaScript
SETITINTERVAL (FONCTIONNECALL (), TIMETOLET); CODE> FONCTION. La méthode que vous appelez sera l'AJAX HIT à un service Web qui fait votre requête. P>
Ajax frappe sur la même application Web Do Rafraîchir la session, malheureusement. Merci pour l'aide en tout cas.
Les demandes AJAX sont comme des demandes régulières, sauf qu'ils sont asynchrones. Cela signifie qu'elles incluent également le cookie de la session ID, attachant la demande à la session et donc réinitialiser le délai d'attente.
Peut-être avons-nous besoin d'un peu plus d'informations? Vous pouvez simplement prolonger le délai d'attente de la session.
Les appels AJAX à un service Web ne devraient pas étendre la session de l'utilisateur.
@Refugee: ne devrait pas ou ne pas faire? N'hésitez pas à poster votre commentaire comme une réponse, comme on dirait que cela pourrait bien être la réponse que je recherche!
J'ai déjà répondu à votre question ci-dessous, avec une idée sur la manière de réaliser l'effet que vous souhaitez.