2010-07-27 4 views
1

Le programme d'installation:MVC2 et Session début de l'événement

contrôleur de compte avec la substance d'ouverture/fermeture de session typique qui vient cuire au four à partir du modèle. Pas beaucoup de modification ici sur la page d'ouverture de session. Utilisation d'un fournisseur d'appartenance personnalisé (SQL), mais je ne pense pas que cela a un impact sur ce que j'essaie de faire ici.

Les Exigences:

Le client veut gérer des licences en limitant les utilisateurs simultanés et non par les utilisateurs au total. Donc, après avoir référencé ce post here, je me suis mis à faire ce travail pour ce que j'ai besoin de faire. Et c'est pour suivre les utilisateurs maximum et actuel pour chaque organisation qui s'est inscrite à notre application. Pas de problème, il suffit d'avoir une application ("max") et une application ("current") qui sont à la fois des hashtables avec la clé étant l'identifiant de l'organisation et la valeur étant les utilisateurs actuels ou max pour l'organisation. Sur Session_Start, je voudrais incrémenter les utilisateurs actuels, vérifier si elle dépasse max et a) rediriger vers une page d'erreur ou b) les laisser continuer avec ce qu'ils doivent faire. Sur Session_End, je décrémenterais le compte.

Le problème:

Lorsque vous utilisez formsService.signIn, ce qui est réellement stocké en session? Je n'arrive pas à rassembler d'informations sur ma session dans le session_start à l'exception de l'ID de session. Donc, je ne peux pas incrémenter le nombre correct pour le suivi des utilisateurs. Et je ne peux pas ajouter une variable à la session car session_start aura déjà été déclenchée avant que j'aie l'opportunité.

+0

IMO, il est presque impossible de trouver les utilisateurs simultanés d'un site Web. Une fois qu'une page est chargée, un serveur web n'a aucune indication que l'utilisateur est toujours sur le site. – ZippyV

+0

Vous savez, je suis de cet état d'esprit aussi et j'ai mis en place un assez bon argument contre (ne peut pas être sûr des comptes corrects, empêcher le ppl de travailler même s'ils ont un compte, etc.) mais à la fin de la journée Je ne paye pas mes propres factures:/ – Tommy

Répondre

1

La notion que la session est en quelque sorte liée à l'authentification est un mythe. Ils sont entièrement indépendants les uns des autres. La session peut même être partagée entre plusieurs utilisateurs s'ils partagent leur clé de session; C'est pourquoi vous ne mettez jamais d'informations sensibles à la sécurité en session. La session peut également expirer lorsque vous êtes connecté. De même, votre session est toujours active après la déconnexion, à moins que vous ne l'abandonniez explicitement. La session ressemble plus à un cache spécifique à l'utilisateur. Donc, vous devez accepter ce fait et vous y adapter. Regardez et voyez si l'utilisateur actuel est authentifié lors du démarrage de la session. Vous devrez également augmenter pendant la connexion, car la session aura déjà commencé. Etc.

+0

Ouais, juste un peu compris. Je suis passé à conserver une table 'temporaire' dans la base de données qui suit les valeurs actuelles et maximales pour chaque organisation et lie l'incrément/décrément aux actions de connexion/déconnexion dans le référentiel. Je peux faire mes vérifications directement à partir de ces actions et ne pas avoir à m'inquiéter de toutes les implications amusantes des sessions. J'ai toujours supposé que lorsque vous vous êtes connecté, vous avez eu une session qui a dit qui vous étiez. Ne ferait pas mon travail si je n'apprenais pas quelque chose tous les jours! THX. – Tommy