L'objet de session de la technologie ASP (Pages de serveurs actifs) est utilisé pour stocker des informations privées des utilisateurs lors des conversations. Les variables et les objets définis dans l'objet de session de l'utilisateur actuel peuvent être partagés entre les pages, mais ne sont pas accessibles par d'autres utilisateurs dans l'application. Informations sur l'état.
L'objet de session a une propriété très importante: le délai d'expiration, qui est utilisé pour définir l'heure à laquelle l'objet de session peut rester inactif avant la publication de la ressource de session (la valeur par défaut est de 20 minutes). Lorsque la valeur temporelle définie par la propriété temporelle est épuisée, la ressource de session sera publiée. Détruisez l'objet de session via l'attribut Timeout, en évitant l'objet de session généré dans le serveur sans restrictions et en protégeant les ressources du serveur. Cependant, dans le développement réel du réseau, il est souvent rencontré que le processus d'application ne peut pas être terminé normalement en raison de la défaillance de l'objet de session et de la perte d'informations sur l'état de l'utilisateur.
Bien que la stratégie de libération de ressources en utilisant l'attribut Timeout soit dans le but de protéger le serveur, l'échec imprévisible de l'objet de session est devenu un inconvénient dans le développement d'applications. Par conséquent, dans le développement d'une application réelle, le problème de la défaillance de l'objet de session doit être résolu.
Solutions traditionnelles
Les solutions existantes doivent utiliser des méthodes côté serveur pour résoudre le problème de la défaillance de l'objet de session. Les méthodes de traitement typiques sont divisées en deux catégories: traitement avant l'échec et le traitement après échec.
Le traitement avant la défaillance fait référence au transfert et à d'autres traitements des variables avant que l'objet de session ne soit expiré pour éviter les problèmes avant qu'il ne se produise. Une solution typique consiste à définir une minuterie dans l'application, à déclencher la minuterie 5 minutes avant l'échec de l'objet de session, puis de réinitialiser les différentes variables et objets de l'objet de session. Cette méthode ajoute une charge supplémentaire au serveur car la minuterie doit être maintenue en temps réel côté serveur et le programme doit être assuré d'être actif tout au long de la session.
Le traitement après échec fait référence à l'incitation à l'utilisateur à traiter immédiatement après l'expiration de l'objet de session. Une solution typique consiste à enregistrer les points d'arrêt du côté serveur après l'échec de l'objet de session, et inviter l'utilisateur à se connecter à nouveau et à continuer à terminer le travail. Cette méthode est simple à mettre en œuvre, mais est souvent plainte et critiquée par les utilisateurs finaux en raison de la récupération automatique incomplète des points d'arrêt et de la complexité du processus de réexamen.
En réponse aux lacunes des deux types de solutions ci-dessus, dans la pratique de la programmation, l'auteur combine les caractéristiques de l'objet cookie et utilise la méthode d'accès conjointement sur les variables au niveau de la session sur le client, ce qui évite non seulement la demande supplémentaire de serveur Ressources, mais résout également le problème du problème des points d'arrêt qui ne sont pas automatiquement restaurés, et cela élimine également la difficulté de se connecter à nouveau.
Nouvelle solution
Un objet cookie est un petit paquet d'informations qui stocke des données sur l'utilisateur actuel, qui peut être passé entre le navigateur et le serveur Web. Dans les applications Web, les cookies fournissent un mécanisme pour suivre et enregistrer chaque emplacement de l'utilisateur. L'une des utilisations les plus courantes des cookies consiste à économiser l'heure et la date de la dernière page Web à visiter dans une application Web ou l'URL à visiter.
Habituellement, les objets cookies sont stockés dans le sous-répertoire cookies dans le répertoire du système Windows client sous forme de fichiers. Les données d'information stockées dans l'objet Cookie peuvent être stockées pendant longtemps, de sorte que les variables au niveau de la session peuvent être sauvegardées dans l'objet cookie. objet cookie.
Un objet cookie a les propriétés suivantes:
● Expire: définissez la date où l'objet cookie expire;
● Domaine: détermine la transmission de l'objet cookie en tant que membre déterminé uniquement par l'attribut de domaine;
● Chemin: Déterminez le chemin de livraison de l'objet cookie;
● Sécurisé: pour clarifier si l'objet cookie est sûr;
● Haskeys: renvoie si l'objet cookie contient plusieurs valeurs.
Si la propriété expire de l'objet cookie n'est pas explicitement définie, l'objet cookie expirera à la fin de la session utilisateur.
Lisez et écrivez des objets via la collection de demandes et la collection de réponse dans ASP. La syntaxe pour écrire des variables à un objet cookie est la suivante:
Réponse.cookies (cookie) [(clé) | .Attribute] = valeur
Où, le cookie est le nom du fichier cookie, la clé indique un élément de dictionnaire, l'attribut est une nature spécifique du cookie et la valeur est la valeur attribuée au cookie. Par exemple, pour créer un cookie appelé myhobby et attribuer sa valeur à: Basketball, utilisez la syntaxe suivante:
<% Réponse.cookies (myhobby) = basket-ball%>
La méthode de lecture d'un objet cookie sur la machine client est la suivante:
Request.cookies (cookie) [(clé) | .Attribute]
Parmi eux, le cookie est le nom du cookie demandé, la clé est l'indice de la valeur de la sous-clé, et l'attribut est utilisé pour indiquer l'attribut cookie. Par exemple: Pour extraire les informations d'un cookie appelé myhobby et écrire sa valeur à la page, utilisez la syntaxe suivante:
<% Request.cookies (myhobby)%>
Il convient de noter que l'en-tête de page HTTP ne peut pas être écrit dans un objet Cookie après que la page HTTP a été envoyée au navigateur de demande. En d'autres termes, les informations sur les cookies ne peuvent pas être envoyées au navigateur après que tout identifiant HTML soit envoyé au navigateur.
Implémentation spécifique
Ce qui suit est une implémentation de salle de discussion basée sur la technologie ASP pour introduire comment traiter le problème de l'échec de la variable d'objet de session.
● Variable initiale au niveau de la session avant que l'utilisateur ne se connecte: Nom d'utilisateur (utilisé pour stocker le nom d'utilisateur de connexion).
<% Session (nom d'utilisateur) =%>
// Initialiser l'objet cookie
<% Réponse.cookies (nom d'utilisateur) =%>
● Lorsque l'utilisateur se connecte, définissez les variables au niveau de la session et sauvegardez à l'objet de cookie client.
<% username = trim (request.for (nom d'utilisateur))%>
<% Session (nom d'utilisateur) = nom d'utilisateur%>
// Variables au niveau de la session de sauvegarde à l'objet de cookie client
<% Réponse.cookies (nom d'utilisateur) = nom d'utilisateur%>
● Lorsque l'utilisateur parle, la variable au niveau de la session est lue.
<% username = session (nom d'utilisateur)%>
// Si la variable a expiré, recherchez l'objet de cookie client
<% si username = alors%>
<% username = request.cookies (nom d'utilisateur)%>
<% si username = alors%>
// Si l'utilisateur entre dans la salle de chat sans se connecter, la valeur d'attribut de l'objet cookie est vide. Pour le moment, l'utilisateur est invité à avoir une erreur et à se tourner vers la page de connexion de l'utilisateur
<% Réponse.redirect error.html%>
<% else%>
// Restaurez cette variable au niveau de session à partir de l'objet cookie
<% Session (nom d'utilisateur) = nom d'utilisateur%>
<% fin si%>
<% fin si%>
● Lorsque l'utilisateur quitte la salle de chat, effacez l'objet au niveau de la session et l'objet cookie.
<% Session (nom d'utilisateur) =%>
// effacer la valeur d'attribut de l'objet cookie pour éviter que les utilisateurs entrent dans la salle de chat sans se connecter
<% Réponse.cookies (nom d'utilisateur) =%>
Le code ci-dessus est exécuté et passé dans l'environnement Windows NT 4.0 + IIS 4.0 + IE 5.0.
Résumé
La méthode d'accès aux variables au niveau de la session dans le client est simple et pratique, et peut effectivement éviter les problèmes tels que la connexion forcée par les utilisateurs.