web-dev-qa-db-fra.com

Délai d'expiration de la session dans ASP.NET

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

  1. défini dans web.config
  2. Définissez le délai de session sur 60 minutes dans IIS gestionnaire/propriétés du site Web/paramètres de configuration ASP.NET.
  3. Définissez le délai d'inactivité sur 60 minutes dans les propriétés/performances du pool d'applications.

J'obtiens toujours un délai d'attente de session de 20 minutes. Y a-t-il autre chose que je dois faire?

155
klone

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.

270
HectorMac

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

39
Rama Subba Reddy M

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
37
Dmitris

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 .

8
davidsleeps

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.

8
lyords

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"
/>
7
Cᴏʀʏ

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" />
3
Paulo Tolentino

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>
3

Vous pouvez trouver le paramètre ici dans IIS:

Settings

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>
2
Melbourne Developer

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.

1
Crying Freeman

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"]));
1
Matty

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.

0
Nayan Hodar