La prévention d'un ASP.NET Délai d'expiration de Session lors de l'utilisation de Silverlight
Je suis en train d'écrire un programme qui a à la fois une ASP.NET la configuration du système et une application Silverlight. La plupart des utilisateurs de rester sur la page Silverlight et de ne pas visiter le ASP.NET site à l'exception de la connexion, etc.
Le problème c'est que j'ai besoin de la session reste active à des fins d'authentification, mais la session expire, même si l'utilisateur est en utilisant les fonctionnalités de l'application silverlight.
Des idées?
Pouvez-vous utiliser une Minuterie ?
OriginalL'auteur Russell Patterson | 2009-06-30
Vous devez vous connecter pour publier un commentaire.
Sur la page hébergeant le contrôle silverlight, vous pouvez configurer un code javascript de la minuterie et de faire un appel ajax à un Gestionnaire Http (.ashx) toutes les 5 minutes pour la garder active. Assurez-vous d'avoir votre classe de Gestionnaire de mettre en œuvre
IRequiresSessionState
.Je recommande le Gestionnaire, car il est plus facile de contrôler le texte de la réponse qui est retourné, et il est plus léger, puis une page aspx.
Vous aurez également besoin de mettre le cache de réponse correctement pour s'assurer que le navigateur fait de l'appel ajax à chaque fois.
Mise à JOUR
Voici un exemple de code pour un HttpHandler
Ensuite, si vous utilisez jQuery, vous pouvez mettre ceci sur votre page aspx
L'intervalle en millisecondes, donc mon exemple d'une commande ping toutes les 5 secondes, vous voulez probablement qu'à un plus grand nombre. Fiddler est un excellent outil pour le débogage des appels ajax, si vous ne l'utilisez pas, commencer.
J'ai essayé cela, et le javascript semble ne pas fonctionner dans IE8. Je viens de télécharger la dernière version de jQuery pour ce but. Est-il autre chose que le gestionnaire de page/besoins?
Il n'y a pas autre chose dont vous aurez besoin. Il est un excellent outil appelé Fiddler2 vous pouvez utiliser pour regarder le trafic réseau et assurez-vous que l'appel est fait. Il pourrait être un problème de chemin d'accès, auquel cas fiddler ferait rapport une erreur 404. Je recommande l'utilisation de cet outil pour voir ce qui se passe. Sinon, IE8 a de bonnes javascript, des outils de débogage qui pourrait également vous rapprocher.
est-il nécessaire d'utiliser le gestionnaire si je suis à l'aide d'asp.net mvc ?
si vous appelez d'un gestionnaire, oui, vous avez encore besoin d'elle. Si vous faites un appel à l'action d'un contrôleur, vous n'auriez pas besoin.
OriginalL'auteur NerdFury
En fait, j'ai trouvé un assez cool hack qui est essentiellement caractérisée par un iframe sur la même page que l'application silverlight. L'iframe contient un aspx page qui s'actualise lui-même à chaque Session.Timeout - 1) minutes. Cela permet de maintenir la session en vie, tant que l'application silverlight est ouvert.
Pour ce faire:
Créer un asp.net page appelée "KeepAlive.aspx". Dans la section head de la page, ajouter ceci:
Dans le fichier code-behind, ajouter ceci:
Maintenant, sur la même page que l'application silverlight, ajouter ceci:
Maintenant la asp.net session restera active pendant que l'application silverlight est utilisé!
OriginalL'auteur Russell Patterson
L'ajax ping /HttpHandler approche est bonne, mais le JQuery $.obtenir la fonction attend un résultat json et jette un javascript erreur d'analyse.
J'ai modifié la table de Ping HttpHandler de retour "{}" au lieu de "OK", et cela a fonctionné mieux.
OriginalL'auteur Kerry Todyruik