2009-08-28 12 views
0

Im en utilisant la session outproc qui est gérée par aspnet_state. Parfois, je reçois des erreurs d'exécution disant que la session est invalide. Je voulais donc vérifier si la session est valide pour chaque requête que je fais. Mais je ne pouvais pas trouver un moyen approprié de le faire comme dans this Question en utilisant Java.Comment vérifier si la session asp est valide?

Voici le code que j'utilise en ce moment dans l'événement page_preinit.Il semble moche, mais cela fonctionne.

  Try 
       Dim x = Session.Keys().Item(0) 
      Catch ex As Exception 
       Session.Clear() 
      End Try 

Est-ce que quelqu'un connaît une meilleure approche?

Merci

+0

Quel est le message d'exécution exact que vous obtenez? Cela ne vous dit rien et la manière dont vous testez avec le travail ci-dessus est basée sur une exception de référence nulle qui se produirait aussi pour une nouvelle session/vide au lieu d'une session invalide. – olle

+0

Utilisez-vous l'authentification par formulaire? – PortageMonkey

+0

olle: la session existe (NOT NULL) mais accéder à n'importe quel élément jette une exception. Cela n'arrive que de temps en temps et seulement sur ma machine de développement comme je fais beaucoup de construction/reconstruction – Youssef

Répondre

0

En fait, j'ai résolu le problème en vérifiant le premier élément de la session (session.item (0)) J'ai mis le code dans try catch. si il y a une exception je viens d'effacer la session. Ce code est dans une page de base pour toutes mes pages.

donc en cas PreInit mon regard de code comme celui-ci

Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit 
    Try 
     Dim x = Session.Keys().Item(0) 
    Catch ex As Exception 
     Session.Clear() 
    End Try 
End Sub 

Il semble être laid, mais il ne résout mon problème.

Merci à tous.

1

Vous pouvez essayer de vérifier l'objet de contexte.

C#

if(Context.Session != null) 
{ 
    //Redirect to login page etc 
} 

VB (utilisé un C# convertisseur VB here..not sûr si cela est correct)

If Context.Session IsNot Nothing Then 
    'Redirect to login page etc 
End If 

Si vous utilisez l'authentification des formulaires et il est correctement configuré, il devrait rediriger pour vous. Si vous avez toujours besoin d'être explicite, je vous recommande de placer ce type de code dans Global.asax, ou une classe de base dérivée de chacune de vos pages, plutôt que de l'ajouter à chaque requête.

+0

Le code que j'utilise est sur la page de base. Mais la session existe, elle n'est pas nulle. L'accès à l'élément eny lancera une exception. En redémarrant simplement la session asp_net le problème se passe ou dans le code je le nettoie. Le code que j'utilise résout mon problème mais je me demandais s'il y en avait d'autres pour le faire. – Youssef

+0

Hmm. Cela ressemble à un problème avec les informations de session (clés) qui ne sont pas remplies correctement ... plutôt que le délai d'expiration de la session. Nous avons eu des problèmes similaires en utilisant la base de données aspnet_state. Notre approche a consisté à tenter d'accéder à une clé de session en plus de vérifier null afin de valider que la base de données aspnet_state renvoyait un objet de session valide. Quant au problème sous-jacent avec une mauvaise session retournée par aspnet_state DB ... il reste encore à résoudre celui-là – PortageMonkey

0

Vérifiez simplement le fichier Session.Count au lieu de tenter d'accéder au premier élément dans un bloc de gestion des erreurs ...

+0

Non, le compte n'a pas aidé car le compte était correct. La session contient des éléments, mais ils sont corrompus quelque raison.Vous pouvez répliquer cela en utilisant la session proc après qu'elle ait fonctionné quelques fois (fortement sollicitée) elle commencera à s'écraser. Ce pourrait être un problème de mémoire. Je n'ai pas enquêté à fond, mais la prise d'essai fonctionne bien pour moi. – Youssef

Questions connexes