Limitation de la taille de la session ASP.NET

Existe-t-il un type de limitation de la taille de la session ou une valeur recommandée à ne pas dépasser?

Dans mon application Web, je crée quelques DataTables pour stocker les sélections d’utilisateurs qui sont stockées dans la session jusqu’à ce que l’utilisateur approuve les sélections. J’ajoute ces valeurs à la firebase database.

Le problème est que je ne sais pas si la session est suffisamment fiable pour conserver ou non quelques objects.

Merci!

Plus d’informations

La taille de la session est d’environ 10-20 Ko maximum.

Oui, c’est assez fiable . Ce n’est tout simplement pas très évolutif , alors planifiez à l’avance. Cela va totalement s’arrêter lorsque vous l’exécutez sur plus d’un serveur.
Et il y a une sorte de limite: Nombre d’utilisateurs simultanés * SizeOf-Session

Bien sûr, cela dépend de la taille des tables, le stockage de quelques ko est généralement acceptable (bien que les sites à fort trafic essaieront de le réduire).

Si vos utilisateurs peuvent partager des tables, vous pouvez alors placer ces données dans l’object Application, ce qui représente une économie considérable.

Et un object de session est limité au paramètre TimeOut, la valeur par défaut est 20 min. Une façon d’optimiser la consommation de mémoire est de réduire cela, mais c’est un compromis entre commodité et facilité d’utilisation.

Voici quelques notes sur l’état de la session:

  • L’état de session InProc ( mode="InProc" ) est limité à la quantité de mémoire disponible pour le processus de travail. Seules les références d’object sont stockées, pas les objects eux-mêmes.

La gestion des états hors processus sérialise les objects avant de les persister:

  • Out of Process La gestion de l’état à l’aide du serveur d’état de session ( mode="StateServer" ) est limitée à la quantité de mémoire disponible pour le service d’état.

  • La gestion de l’état Hors processus à l’aide de SQL Server ( mode="SQLServer" ) est uniquement liée à la taille maximale du type de données d’ image SQL ou à la taille maximale autorisée de la firebase database.

De toute évidence, le processus de travail doit disposer de suffisamment de mémoire pour pouvoir récupérer un object hors de session et le réhydrater pendant la durée de la requête http.

Comme je l’ai mentionné précédemment, la gestion des états hors processus sérialise les objects avant de les conserver.

Cela signifie que les objects doivent être sérialisables, ce qui exclut , par exemple, XmlDocument ou tout élément héritant de MarshalByRef .

Tenter de sérialiser des objects de ce type aboutira à l’exception suivante:

Impossible de sérialiser l’état de la session. En mode ‘StateServer’ et ‘SQLServer’, ASP.NET sérialise les objects d’état de session et, par conséquent, les objects non sérialisables ou les objects MarshalByRef ne sont pas autorisés. La même ressortingction s’applique si une sérialisation similaire est effectuée par le magasin d’état de session personnalisé en mode “Personnalisé”.

Je suppose que la session est stockée en mode “inProc”. Dans ce mode, la session, le cache, etc. des applications ASP.NET sont stockés dans la RAM du serveur Web (via le processus aspnet_wp.exe). Et .NET ne parvient pas à utiliser tout cela. Il y a un paramètre dans machine.config qui indique la limite de seuil (par défaut 60%). Une fois ce seuil atteint, IIS recyclera le processus de travail et toutes les informations de la session seront perdues.

Notez que si votre serveur héberge plusieurs applications asp.net, toutes les applications partageront 60% de la mémoire. Ainsi, si l’utilisation de la mémoire cumulée atteint le seuil, le processus de travail est toujours recyclé.

Une autre solution consiste à configurer l’application pour qu’elle utilise la session en mode hors processus (en utilisant un état ou un serveur sqlserver pour stocker les informations de session).

Le mode hors processus peut réduire les performances de votre système.

Reportez-vous à cet article pour plus d’informations sur la gestion de l’état de session.

Vous devez toujours supposer que la session est un stockage très précieux et très limité. La consommation doit être aussi faible que possible, car vous ne pouvez jamais savoir combien d’utilisateurs l’application va prendre en charge.

DataTable peut être trop volumineux pour être stocké dans des sessions, à moins qu’il ne soit suffisamment petit.