2011-07-14 3 views
1

Je déploie une application ASP.NET MVC 2 en utilisant Apache/mod_mono/MONO (2.8.1) qui utilise la structure d'authentification intégrée ASP.NET. Lorsque je redémarre Apache ou que j'utilise le panneau de configuration mod_mono pour redémarrer le processus de serveur mono, les utilisateurs sont déconnectés.Persistance de l'authentification MONO/ASP.NET

Je ne veux pas que cela se produise. J'utilise des fournisseurs Profil/Adhésion/Rôle personnalisés (qui sont soutenus par une base de données Redis), et ceux-ci ont actuellement une implémentation minimum. Je ne vois pas où mon problème se situe ici, mais est-ce que je manque quelque chose d'évident?

Je remarque que le cookie .MONOAUTH change de valeur lorsqu'un utilisateur se reconnecte, donc je suppose qu'il doit y avoir une certaine persistance qui ne se produit pas. Toutes les solutions ou les pointeurs vers la documentation pertinente seraient géniaux!

Répondre

3

REMARQUE: Je ne suis pas sûr que les informations ci-dessous diffèrent lorsque vous utilisez un fournisseur d'appartenance - il se peut que cet état de session soit conservé par le fournisseur d'appartenance lui-même.

Il est probable que vous utilisiez un stockage d'état de session "en cours de traitement". Cela signifie que chaque fois que vous redémarrez le processus du serveur Web, vous supprimez toutes les informations de session stockées dans l'espace mémoire du processus du serveur Web. Pour éviter l'effacement des informations de session, vous pouvez utiliser un serveur d'état de session hors processus, soit en tant que service en mémoire (voir ci-dessous pour la version Mono), soit sur SQL Server. Sinon, il y a aussi un certain nombre de fournisseurs de magasins non officiels de session personnalisés qui utilisent des mécanismes de stockage alternatifs (par exemple MongoDB etc.)

J'ai trouvé ce que vous voudrez peut-être, ce qui est de cette session Mono ASP.NET Etat serveur: http://manpages.ubuntu.com/manpages/gutsy/man1/asp-state2.1.html

Dans un premier temps, jetez un coup d'oeil dans votre web.config sur la propriété system.web -> sessionState. Si c'est réglé sur mode = "InProc" alors il y a votre problème. Il devrait ressembler davantage:

<sessionState 
mode="StateServer" 
stateConnectionString="tcpip=server:port" 
stateNetworkTimeout="number of seconds"/> 
+0

Merci pour la réponse rapide! Je crois que vous m'avez mis sur la bonne voie oui. Je vous donnerai un vote et j'ajouterai d'autres commentaires une fois que j'aurai enquêté plus avant ... Je me suis juste retiré de cette tâche momentanément. –

+0

Solution: définissez les clés validationKey et decryptionKey manuellement: . Il semble que ce soit un bogue en mono que ceux-ci prennent des valeurs différentes sur les réinitialisations du serveur lors de la génération automatique (qui est la valeur par défaut). –

3

Solution: définissez le validationKey et decryptionKey manuellement:

< machineKey validationKey = "blahblah" decryptionKey = "blahblah"/>

Je pense que cela est probablement bug en mono que ceux-ci prennent des valeurs différentes sur les réinitialisations du serveur lors de la génération automatique (qui est la valeur par défaut).