web-dev-qa-db-fra.com

Lequel est le meilleur, InProc ou SQL Server, pour le mode état de session dans asp.net?

Je développe un site Web ASP.NET. Je veux savoir lequel est le meilleur en mode état de session: InProc ou SQL Server? J'ai besoin de connaître vos expériences sur cette question.

Une autre question concerne l'attribut sans cookie. Y a-t-il une faille de sécurité sur mon site si je le mets à vrai? Dans tous les exemples que j'ai vus sur le site MSDN, cet attribut a été défini sur false.

Et la dernière question concerne l'attribut Timeout. Cet attribut affecte-t-il la durée de vie de mes sessions lorsque je le mets en mode InProc?

24
Ali Foroughi

Mieux en quoi?

  • session InProc est beaucoup plus rapide, a moins d'exigences (sérialisation), mais inutilisable lorsque vous exécutez votre application sur plusieurs serveurs Web;

  • session SQL est beaucoup plus lent, a des exigences de sérialisation d'objet, mais peut être partagé entre plusieurs serveurs Web;

C'est la principale différence entre eux dont les développeurs devraient surtout se soucier.

Session sans cookie

Vous devriez poser une question distincte à ce sujet, car c'est une question complètement indépendante de la précédente.

Si vous désactivez la gestion des ID de session des cookies, vous pourrez voir l'ID de session. Mais vous le pouvez aussi si vous vérifiez les cookies. Le nombre est là.

Et l'expiration du cookie de session est définie sur la session du navigateur, c'est donc pratiquement la même en termes de persistance.

Les sessions peuvent être détournées si vous connaissez l'ID de session d'une autre partie. C'est plus facile bien sûr si vous utilisez des sessions sans cookies car tout ce que vous avez à faire est de changer d'URL ...

Et il y a autre chose avec la copie d'URL et le partage/enregistrement (Favoris). Je suppose que je n'ai pas à expliquer le problème.

Les sessions sans cookies sont false par défaut car la grande majorité des navigateurs prennent en charge les cookies. Vous ne devez l'activer que lorsque vous savez que vos clients n'auront pas de cookies.

Expiration de la session

Le délai d'expiration de la session est toujours lié à l'expiration de la session, quel que soit le type de session. Mais vous devez être conscient que l'état de session SQL peut ne pas respecter ce paramètre lorsque vous utilisez les éditions SQL Express car vous avez besoin du service SQL Server Agent pour rejeter les sessions expirées. Vous pouvez atténuer ce problème en écrivant votre propre service Windows qui rejette les sessions expirées.

32
Robert Koritnik

Vous pouvez utiliser Session de 3 manières. Chacun a ses avantages et ses inconvénients

In-Proc:

  • La session Inproc est plus rapide.
  • Vous pouvez ajouter des objets sans sérialisation
  • Mais limité à un serveur, si votre application s'exécute sur plusieurs serveurs. Cela ne fonctionnera pas pour vous
  • Si quelque chose se produit Pool d'applications, vous perdrez toutes vos informations de session

État de la session:

  • S'exécutera en tant que service Windows
  • Si votre application s'exécute sur plusieurs serveurs, cela vous aidera
  • Les objets ajoutés à la session doivent être sérialisés

Serveur SQL:

  • Utilise le serveur SQL, mais il existe également une implémentation Oracle
  • Plus lent que State Server
  • Beaucoup plus fiable

Consultez également cette question: SQLServer vs StateServer pour ASP.NET Session State Performance

15
adt

État de session InProc

Le mode de session InProc indique que l'état de session est stocké localement, ce qui signifie qu'avec le mode d'état de session InProc, les objets sont stockés dans le domaine d'application de l'application Web.Par conséquent, l'état de session est perdu lorsque IIS (Internet Système d'information) redémarre.
Généralement, l'AppDomain est redémarré en fonction de plusieurs facteurs comme les paramètres d'attribut memoryLimit dans la section du fichier de configuration, en modifiant Global.asax ou le fichier Web.config, etc.

Nous pouvons utiliser le mode d'état de session StateServer ou SqlServer pour surmonter ces problèmes et ici l'état de session n'est pas stocké dans l'AppDomain de l'application Web.

État de session OutProc

Dans la session OutProc, l'état Sessin est stocké dans les modes StateServer et SqlServer et non dans AppDomain de l'application Web.

StateServer: il utilise un service Microsoft Windows autonome pour stocker la variable de session, donc ce service est indépendant d'IIS, il peut fonctionner sur un serveur séparé. Vous pouvez utiliser ce mode pour une solution d'équilibrage de charge car plusieurs serveurs Web peuvent partager des variables de session. Bien que les variables de session ne soient pas perdues si vous redémarrez IIS, les performances sont affectées lorsque vous franchissez les limites du processus.

SqlServer: Le mode SqlServer vous permet également d'utiliser un magasin d'état situé hors du processus IIS et qui peut être situé sur l'ordinateur local ou un serveur distant. Pour la persistance des informations de session, vous pouvez utiliser le mode SqlServer Le mode SqlServer est similaire au mode hors processus, sauf que les données de session sont conservées dans un serveur SQL.

2
Jom George