Comment définir le délai d'expiration de session dans web.config

179

J'ai essayé très dur mais je ne trouve pas de solution sur la façon de définir la valeur du délai d'expiration de session pour une session en cours pour une application Web ASP.Net.

J'utilise VSTS 2008 + .Net 3.5 + C #. Voici ce que j'ai écrit par moi-même pour définir le délai d'expiration à 1 minute, est-ce correct?

J'ai écrit dans la section system.web dans le web.config

<sessionState timeout="1" mode="InProc" />
George2
la source
5
La façon dont vous définissez le délai d'expiration est correcte. Avez-vous des problèmes avec cela?
Darin Dimitrov
7
Vous savez que cela signifie qu'il expirera après 1 minute d'inactivité, pas après 1 minute après son début? Je suppose que si vous posez cette question et que vous avez tapé correctement le délai d'expiration, vous pourriez être induit en erreur sur son fonctionnement.
Ivan Zlatanov
1
J'ai besoin de régler le temps d'inactivité, c'est exactement ce dont j'ai besoin. Merci Ivan!
George2
LOL! Je ne recommanderais pas de définir le délai d'attente à seulement 1 minute. Cela va tuer la facilité d'utilisation!
Brian McCarthy
3
Je comprends parfaitement la nécessité d'une courte période d'expiration. Dans mon cas, il s'agit de tester la convivialité du site si la session expire et comment elle réagit une fois que l'utilisateur revient. Il est difficile de tester cela tout en déboguant à moins que le délai d'expiration de la session ne se produise rapidement
Brett Weber

Réponses:

323

Si vous souhaitez définir le délai d'expiration à 20 minutes, utilisez quelque chose comme ceci:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>
Wolfwyrd
la source
16
20 minutes ou heures? (timeout = "20")
Muhammad Awais
21
Config indique le délai en minutes donc 20 minutes
Wolfwyrd
50

La valeur que vous définissez dans l' timeoutattribut est l'une des méthodes correctes pour définir la valeur du délai d'expiration de la session.

L' timeoutattribut spécifie le nombre de minutes pendant lesquelles une session peut être inactive avant d'être abandonnée. La valeur par défaut de cet attribut est 20.

En attribuant une valeur de 1 à cet attribut, vous avez défini la session pour qu'elle soit abandonnée 1 minute après son inactivité.

Pour tester cela, créez une page aspx simple et écrivez ce code dans l'événement Page Load,

Response.Write(Session.SessionID);

Ouvrez un navigateur et accédez à cette page. Un identifiant de session sera imprimé. Attendez une minute, puis appuyez sur Actualiser. L'identifiant de session va changer.

Maintenant, si ma supposition est correcte, vous voulez que vos utilisateurs se déconnectent dès que la session expire. Pour ce faire, vous pouvez créer une page de connexion qui vérifiera les informations d'identification de l'utilisateur et créer une variable de session comme celle-ci -

Session["UserId"] = 1;

Maintenant, vous devrez effectuer une vérification sur chaque page pour cette variable comme ceci -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Ceci est un exemple simple de la façon dont cela fonctionnera.

Mais, pour sécuriser vos applications de qualité de production, utilisez les classes Roles & Membership fournies par ASP.NET. Ils fournissent une authentification basée sur les formulaires qui est beaucoup plus fiable que l'authentification normale basée sur la session que vous essayez d'utiliser.

Kirtan
la source
Bon conseil ... Assurez-vous de définir une variable de session avant de tester avec Response.Write (Session.SessionID); Sinon, il sera actualisé avec un nouvel identifiant à chaque actualisation.
Chris Catignani
1

Si vous utilisez MVC, placez-le dans le fichier web.config dans le répertoire racine de l'application Web, et non dans web.config dans le répertoire Views. Il doit également être DANS le nœud system.web, pas sous comme George2 l'a déclaré dans sa question: "J'ai écrit sous la section system.web dans le web.config"

La valeur du paramètre timeout représente les minutes.

Il existe d'autres attributs qui peuvent être définis dans l'élément sessionState. Vous pouvez trouver des informations ici: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Vous pouvez ensuite attraper le début d'une nouvelle session dans le fichier Global.asax en ajoutant la méthode suivante:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}
Keith Aymar
la source
0

Utilisez ceci dans web.config:

<sessionState 

  timeout="20" 
/>
Balaji Birajdar
la source
30
Vous n'avez pas besoin de la plupart des attributs que vous listez, juste timeoutvraiment. stateConnectionStringet sqlConnectionStringsont ignorés quand mode="InProc", et les valeurs de modeet cookielesssont définies sur leurs valeurs par défaut. Donc, cela se résume vraiment à la réponse de Wolfwyrd.
arcain
0

Si cela ne fonctionne pas web.config, vous devez le définir depuis IIS.

asif jan
la source