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

163

J'exécute une application ASP.NET 2.0 dans IIS 6.0. Je souhaite que le délai d'expiration de la session soit de 60 minutes au lieu de 20 minutes par défaut. J'ai fait ce qui suit

  1. Mettre <sessionState timeout="60"></sessionState> en web.config.
  2. Définissez le délai d'expiration de session sur 60 minutes dans le gestionnaire IIS / les propriétés du site Web / les 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'expiration de session à 20 minutes. Dois-je faire autre chose?

Klone
la source
1
Veuillez fournir des informations sur la façon dont vous avez mesuré les 20 minutes. Soyons sûrs que les 20 minutes sont un délai d'expiration de session, et non un autre type.
John Saunders
11
Veuillez marquer les réponses de qualité comme acceptées en utilisant la coche à côté des flèches de vote positif / négatif
Brian Webster
3
Huit ans plus tard, la bonne réponse n'est toujours pas acceptée.
Nathan
Veuillez clarifier ce que vous entendez par gestionnaire IIS / propriétés du site Web / paramètres de configuration ASP.NET. Etape par étape, qu'avez-vous changé dans IIS?
niico

Réponses:

275

Utilisez-vous l'authentification par formulaire?

L'authentification par formulaire utilise sa propre valeur pour le délai d'expiration (30 minutes par défaut). Un délai d'expiration d'authentification par formulaire 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 permet de facilement confondre l'un avec l'autre.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

La définition du délai d'expiration des formulaires sur une valeur inférieure au délai d'expiration de la session peut donner à l'utilisateur une fenêtre dans laquelle se reconnecter sans perdre aucune donnée de session.

HectorMac
la source
@ Incassable en quelques minutes.
Word Rearranger
44

Je ne connais ni web.config ni IIS. Mais je crois qu'à partir du code C #, vous pouvez le faire comme

Session.Timeout = 60; // 60 is number of minutes
Dmitris
la source
22
Cela ajustera-t-il uniquement le délai d'expiration de la session en cours? Ou cela ajustera-t-il le délai d'expiration pour l'ensemble de l'application?
Johncl
2
Rien dans la documentation n'indique que le paramètre Session.Timeoutest différent de l'utilisation de web.config ou IIS, donc je suppose que c'est pour l'ensemble de l'application.
Drasive
Je pense que @Drasive a raison, mais cela doit être prouvé au moins par 2 clients connectés séparés au serveur et vérifier le délai d'expiration de la session inactive.
QMaster
42

Utilisez le bloc de code suivant dans votre fichier web.config. Ici, le délai d'expiration de la session par défaut est de 80 minutes.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Utilisez le lien suivant pour le délai d'expiration de la session avec un message d'alerte contextuel.

Exemple de délai d'expiration de session

FYI: Les exemples ci-dessus sont réalisés avec le contrôle popup devexpress, vous devez donc personnaliser / remplacer le contrôle popup devexpress par un contrôle popup normal. Si vous utilisez devexpress pas besoin de personnaliser

Rama Subba Reddy M
la source
cookieless faux?
Kiquenet
3
@Kiquenet, si vous définissez cookieless sur true, votre sessionId sera incorporé dans l'URL, ce qui présente un risque de sécurité élevé. Le framework ASP.NET insère un identifiant unique dans l'URL, vous pouvez le vérifier en désactivant le cookie ou en définissant l'attribut sans cookie sur true comme vous l'avez fait. Selon MSDN, par défaut, la valeur SessionID est stockée dans un cookie de session non expirant dans le navigateur, mais si vous spécifiez cookieless = "true", ASP.NET maintient l'état de session sans cookie en insérant automatiquement un ID de session unique dans l'URL de la page .
Hamza Khanzada
8

Y a-t-il quelque chose dans machine.config qui pourrait prendre effet? La définition du délai d'expiration de la session dans web.config doit remplacer tous les paramètres dans IIS ou machine.config, cependant, si vous avez un fichier web.config quelque part dans un sous-dossier de votre application, ce paramètre remplacera celui de la racine de votre application.

En outre, si je me souviens bien, le délai d'expiration dans IIS n'affecte que les pages .asp, pas .aspx. Êtes-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"
/>
Cᴏʀʏ
la source
8

Dans ma situation, c'était Application Pool. Il est configuré pour redémarrer lorsqu'il est inactif pendant xx minutes. Lorsque je le configure pour ne pas redémarrer, il semble utiliser la valeur de Web Config.

lyords
la source
Je sais que nous sommes en 2020 mais putain cela vient de résoudre mon problème merci!
Binaire 9
8

C'est généralement tout ce que vous devez faire ...

Êtes-vous sûr qu'après 20 minutes, la raison pour laquelle la session est perdue est d'être inactive ...

Il existe de nombreuses raisons pour lesquelles la session pourrait être effacée. Vous pouvez activer la journalisation des événements pour IIS et pouvez ensuite utiliser l'observateur d'événements pour voir les raisons pour lesquelles la session a été effacée ... vous pourriez trouver que c'est peut-être pour d'autres raisons?

Vous pouvez également lire la documentation des messages d'événement et le tableau des événements associé .

davidsleeps
la source
3

Si vous utilisez l'authentification, je vous recommande d'ajouter ce qui suit dans le fichier web.config.

Dans mon cas, les utilisateurs sont redirigés vers la page de connexion à l'expiration du délai:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
amar beeharry panray
la source
J'ai eu une erreur ici <authentication mode = "Forms"> après l'avoir placé dans web.config
Lst Patrick
2

Depuis ASP.Net core 1.0 (vNext ou quel que soit son nom), les sessions sont implémentées différemment. J'ai changé la valeur du délai d'expiration de session dans Startup.cs, en void ConfigureServicesutilisant:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

Ou si vous souhaitez utiliser le appsettings.jsonfichier, 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"]));
Matty
la source
2

Vous pouvez trouver le paramètre ici dans IIS:

Paramètres

Il peut être trouvé au niveau du serveur, au niveau du site Web ou au niveau de l'application sous "ASP".

Je pense que vous pouvez le définir au niveau web.config ici. Veuillez le confirmer vous-même.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>
Christian Findlay
la source
Aussi dans Global.asax?
Kiquenet
1

La valeur du délai d'expiration des sessions IIS concerne uniquement les applications .asp classiques, elle est contrôlée sur 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.

Carlos E
la source
Qu'en est-il du délai d'expiration du pool d'applications d'IIS?
SteveCav
1

Le délai d'expiration de session par défaut est défini dans IIS à 20 minutes

Suivez les procédures ci-dessous pour chaque site hébergé sur le site Web IIS 8.5

Configuration du délai d'expiration IIS

Ouvrez le gestionnaire IIS 8.5.

Cliquez sur le nom du site.

Sélectionnez "Éditeur de configuration" dans la section "Gestion".

Dans la liste déroulante "Section:" en haut de l'éditeur de configuration, recherchez "system.web / sessionState".

Définissez le "délai" sur "00:20:00 ou moins", en utilisant la valeur la plus basse possible en fonction de l'application. Les valeurs acceptables sont 5 minutes pour les applications à valeur élevée, 10 minutes pour les applications à valeur moyenne et 20 minutes pour les applications à faible valeur. -valeur des applications.

Dans le volet "Actions", cliquez sur "Appliquer".

Guicb
la source
0

si vous voulez que la session expire pour le site Web, supprimez

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

balise du fichier web.config.

Nayan Hodar
la source
-1

La propriété Timeout spécifie le délai d'expiration attribué à l'objet Session pour l'application, en minutes. Si l'utilisateur n'actualise pas ou ne demande pas de page dans le délai d'expiration, la session se termine.

IIS 6.0: la valeur minimale autorisée est de 1 minute et la valeur maximale est de 1440 minutes.

Session.Timeout = 600;
Muhammad Awais
la source
-2

Après avoir modifié la valeur du délai d'expiration de session dans IIS, veuillez redémarrer IIS. Pour ce faire, accédez à l'invite de commande. Tapez IISRESET et appuyez sur Entrée.

Varun R
la source
La modification du fichier web.config entraîne automatiquement la réinitialisation d'IIS.
Timothy Gonzalez