2010-04-25 3 views
2

J'ai besoin d'aide pour essayer de comprendre comment vérifier la session des utilisateurs et voir s'ils sont toujours connectés ou non. Le problème vient du fait que j'ai une page statique qui charge à peu près tout dans des "onglets" en utilisant jQuery. Ainsi, lorsque l'utilisateur navigue sur la page, il ne quitte jamais la même page que celle sur laquelle il a commencé. Indique mon problème en essayant de déterminer s'ils sont toujours connectés ou non quand ils cliquent sur mettre à jour leurs informations sur leur profil ou autres joyeusetés.ASP Classic et JavaScript vérifient l'état de la session

+0

Sérieusement, vous n'avez absolument aucune communication avec le serveur après le premier chargement, aucune récupération de données, etc. via AJAX? – AnthonyWJones

Répondre

1

Créez une communication arbitraire avec le serveur lorsque l'utilisateur "navigue sur la page". Par exemple, quand ils cliquent sur un "onglet" malgré qu'il n'ait pas besoin du serveur, utilisez AJAX pour faire un ping sur le serveur quand même.

Bien sûr, en réalité, vous voulez vérifier que la session est en ligne après tout l'utilisateur pourrait regarder le bouton "Mise à jour" d'une heure avant de l'appuyer réellement.

Vous avez besoin des deux sinon vous ennuierez les utilisateurs qui ont utilisé activement votre application, puis trouvez qu'ils sont en quelque sorte expiré, ce qui sera contraire à leurs expériences sur d'autres sites.

Dans ASP, vous devez stocker quelque chose dans l'objet Session pour indiquer que l'utilisateur est connecté. Voici un exemple de page «Suis-je connecté»: -

<% 
Response.ContentType = "application/json" 
If Session("LoggedOn") Then 
    Response.Write "{loggedOn: true}" 
Else 
    Response.Write "{loggedOn: false}" 
End If 
%> 

Vous pouvez désormais utiliser cette page comme cible ping. Ping juste avant la mise à jour. Si déconnecté je suggérerais que vous publiez des détails pour la mise à jour au serveur n'importe où mais pas pour actionner la mise à jour. Demandez le loggon d'utilisateur de votre manière habituelle avec une redirection vers une page qui actionnera alors ces détails.

+0

Merci pour cela, Anthony. Je vais l'utiliser avec un response.redirect() s'ils sont déjà déconnectés. : o) – StealthRT

+0

Cela ne va-t-il pas à l'encontre du but d'AJAX, en envoyant des requêtes inutiles? –

+0

@thomask: Le but d'AJAX est d'améliorer l'expérience de l'utilisateur lors de l'utilisation d'une application Web. Avoir une application ___ déconnectée du serveur sur le fait qu'elle peut expirer alors que l'utilisateur l'utilise réellement n'est pas une bonne expérience. Avoir un ping __asynchronous__ (le premier A dans AJAX) ping à des points appropriés pendant l'utilisation en gardant la session du serveur en vie n'a aucun impact sur l'expérience actuelle des utilisateurs. Pourtant, il élimine le problème avec une session qui expire en raison de l'inactivité supposée. – AnthonyWJones

0
<TITLE>YourStaticPage.aspx</TITLE> 
<% 
    Session("username")="StealthRT" 
    Session("email")="[email protected]" 
    Session("userid")=1 
    Session("LastPageLoad")=System.DateTime.Now 
%> 

Lorsque vous gérez l'événement Button_Click pour votre page « profil de mise à jour », vous devriez être en mesure de vérifier si ces variables sont encore stockées dans Session.Contents (« nom d'utilisateur ») ou Session.Contents (« LastPageLoad »

1

Je vous recommande d'adopter une approche légèrement différente.

Concevez vos routines de traitement des données côté serveur pour renvoyer un statut spécial, tel que le statut HTTP 401 si l'utilisateur n'est plus connecté.

Ensuite, créez vos routines AJAX côté client capables de gérer cela, c'est-à-dire en ouvrant/affichant votre écran de connexion, de préférence sans perdre les données/le contexte de l'opération tentée.