J'exécute une application ASP.NET 2.0 dans IIS 6.0. Je veux que le délai d'expiration de la session soit de 60 minutes plutôt que de 20 minutes par défaut. J'ai fait ce qui suit
J'obtiens toujours un délai d'attente de session de 20 minutes. Y a-t-il autre chose que je dois faire?
Utilisez-vous l'authentification par formulaire?
L'authentification par formulaire utilise sa propre valeur pour le délai d'attente (30 min. Par défaut). Un délai d’authentification des formulaires enverra l’utilisateur à la page de connexion avec la session toujours active. Cela peut ressembler au comportement de votre application lorsque la session expire, ce qui facilite la confusion entre les deux.
<system.web>
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
<sessionState timeout="60" />
</system.web>
Si vous définissez le délai d'expiration des formulaires sur une valeur inférieure à celle de la session, l'utilisateur peut disposer d'une fenêtre lui permettant de se reconnecter sans perdre les données de la session.
Utilisez le bloc de code suivant dans votre fichier web.config. Ici, le délai de session par défaut est de 80 minutes.
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>
Utilisez le lien suivant pour Session Timeout avec un message d’alerte contextuel.
Exemple de délai d'attente de session
FYI: Les exemples ci-dessus sont réalisés avec le contrôle contextuel devexpress, vous devez donc personnaliser/remplacer le contrôle contextuel devexpress par un contrôle contextuel normal. Si vous utilisez devexpress pas besoin de personnaliser
Je ne connais pas Web.config ou IIS. Mais je crois que depuis le code C #, vous pouvez le faire comme
Session.Timeout = 60; // 60 is number of minutes
C'est généralement tout ce que vous devez faire ...
Etes-vous sûr qu'après 20 minutes, la raison de la perte de la session est d'être inactif ...
Il existe de nombreuses raisons pour lesquelles la session peut être libérée. Vous pouvez activer la journalisation des événements pour IIS et utiliser ensuite l'afficheur d'événements pour voir les raisons pour lesquelles la session a été effacée. Vous constaterez peut-être que c'est pour d'autres raisons également?
Vous pouvez également lire la documentation relative aux messages d’événement et au tableau associé des événements .
Dans ma situation, il s'agissait du pool d'applications. Il est configuré pour redémarrer lorsqu'il est inactif pendant xx minutes. Lorsque je le configure pour qu'il ne redémarre pas, il semble utiliser la valeur de Web Config.
Avez-vous quelque chose dans machine.config qui pourrait prendre effet? La définition du délai de session dans web.config doit remplacer tous les paramètres de IIS ou de machine.config. Toutefois, si vous avez un fichier web.config dans un sous-dossier de votre application, ce paramètre remplacera celui de la racine de votre application.
De plus, si je me souviens bien, le délai d'attente dans IIS n'affecte que les pages .asp et non .aspx. Etes-vous sûr que votre code de session dans web.config est correct? Cela devrait ressembler à quelque chose comme:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="60"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
cookieless="false"
timeout="60"
/>
https://usefulaspandcsharp.wordpress.com/tag/session-timeout/
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="60" slidingExpiration="true" />
</authentication>
<sessionState mode="InProc" timeout="60" />
Si vous utilisez l'authentification, je vous recommande d'ajouter les éléments suivants dans le fichier web.config.
Dans mon cas, les utilisateurs sont redirigés vers la page de connexion après expiration du délai d'attente:
<authentication mode="Forms">
<forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
Vous pouvez trouver le paramètre ici dans IIS:
Vous pouvez le trouver au niveau du serveur, du site Web ou de l'application sous "ASP".
Je pense que vous pouvez le définir au niveau web.config ici. Veuillez confirmer ceci pour vous-même.
<configuration>
<system.web>
<!-- Session Timeout in Minutes (Also in Global.asax) -->
<sessionState timeout="1440"/>
</system.web>
</configuration>
La valeur du délai d'expiration des sessions IIS concerne uniquement les applications .asp classiques. Elle est contrôlée sous la configuration IIS. Dans votre cas, pour les applications ASP.NET, seule la valeur de délai d'expiration spécifiée par web.config s'applique.
Depuis ASP.Net core 1.0 (vNext ou quel que soit le nom utilisé pour cela), les sessions sont implémentées différemment. J'ai changé la valeur du délai d'expiration de la session dans Startup.cs
, void ConfigureServices
en utilisant:
services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));
Ou si vous voulez utiliser le fichier appsettings.json
, vous pouvez faire quelque chose comme:
// Appsettings.json
"SessionOptions": {
"IdleTimeout": "00:30:00"
}
// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
si vous voulez que le délai de session pour le site Web soit supprimé
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
balise du fichier web.config.