it-swarm.com.de

ASP.NET-Sitzungszeitlimitprüfung

Ich mache Blackbox-Tests einer ASP.Net-Website, und ich muss verschiedene Session-Timeout-Szenarien testen. 

Ich bin mir nicht sicher, ob die Timeouts vollständig gekapselt sind. Wenn Sie dann eine Seite für 20 Minuten geöffnet lassen, gibt es eine einfachere Möglichkeit, ein Timeout für die Sitzung zu erzwingen?

35
ctrlShiftBryan

Verringere das Zeitlimit

Die einfachste und unaufdringlichste Methode, dies zu testen, besteht wahrscheinlich darin, das Zeitlimit auf eine relativ kleine Zahl, wie etwa 3 oder 5 Minuten, zu reduzieren. Auf diese Weise können Sie für einige Minuten eine Pause einlegen, um eine längere Pause zu simulieren, ohne sich Gedanken über den Neustart der Anwendung oder einen speziellen Reset-Code zu machen, der die Testergebnisse beeinflusst.

Sie können das Zeitlimit für den Sitzungsstatus an einigen Stellen ändern - global (in der Datei web.config für die entsprechende .NET Framework-Version im Ordner config) oder nur für Ihre Anwendung.

Um das Timeout nur für Ihre Anwendung zu ändern, können Sie der web.config Ihrer Anwendung Folgendes hinzufügen:

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

Alternativ können Sie diese Einstellung auch für Ihre Anwendung über ein Konfigurationsdialogfeld IIS ändern (ich glaube jedoch, dass Sie noch eine web.config für Ihre Anwendung definieren müssen, andernfalls wird die Option Konfiguration bearbeiten deaktiviert).

Klicken Sie mit der rechten Maustaste auf Ihre Webanwendung in IIS, und navigieren Sie zu Eigenschaften | Registerkarte ASP.NET | Konfiguration bearbeiten | Registerkarte Statusverwaltung | Sitzungszeitüberschreitung (Minuten).

Beachten Sie, dass Sie diese Einstellung auch über Code bearbeiten können. Wenn dies bereits geschehen ist, wird die Einstellung in der Datei web.config effektiv ignoriert, und Sie müssen eine andere Methode verwenden.

Session.Abandon () aufrufen

Eine etwas aufdringlichere Technik als das Festlegen eines niedrigen Zeitlimits wäre das Aufrufen von Session.Abandon (). Stellen Sie sicher, dass Sie dies von einer anderen Seite als Ihrer Anwendung aus aufrufen, da die Sitzung erst beendet wird, wenn alle Skriptbefehle auf der aktuellen Seite verarbeitet wurden.

Meines Wissens ist dies ein recht sauberer Weg, Sitzungszeitüberschreitungen zu testen, ohne tatsächlich auf sie zu warten.

Erzwinge einen Neustart der Anwendung

In einer Standardkonfiguration für den Sitzungsstatus können Sie ein Sitzungszeitlimit simulieren, indem Sie die Sitzungen vollständig ausblasen, indem Sie die Anwendung neu starten. Dies kann auf verschiedene Arten erfolgen, von denen einige unten aufgeführt sind:

  • Recycling des App-Pools durch
    • das Snap-In IIS MMC
    • die Befehlszeile (iisapp/a AppPoolID/r)
    • Ändern von web.config, global.asax oder einer DLL im Verzeichnis bin
  • Starten Sie IIS durch Neu.
    • das Snap-In IIS MMC
    • services.msc und Neustart des IIS Admin-Dienstes
    • die Befehlszeile (iisreset)

Wenn ich "Standardkonfiguration" erwähne, meine ich eine Webanwendung, die für die Verwendung des Sitzungsstatusmodus "InProc" konfiguriert ist. Es gibt andere Modi, die den Sitzungsstatus auch dann beibehalten können, wenn die Webanwendung neu gestartet wird (StateServer, SQLServer, Custom).

Manipulation mit dem Statusverfolgungsmechanismus

Unter der Annahme, dass Ihre Webanwendung nicht mit einem Modus ohne Cookies konfiguriert ist (standardmäßig werden Cookies verwendet), könnten Sie den Cookie mit der Sitzungs-ID aus dem Clientbrowser entfernen.

Ich verstehe jedoch, dass dies nicht wirklich eine Zeitüberschreitung simuliert, da der Server die Sitzung immer noch kennt, er wird von niemandem gesehen, der sie verwendet. Die Anforderung ohne Sitzungs-ID wird einfach als eine unsichtbare Anforderung behandelt, die eine neue Sitzung benötigt, die Sie möglicherweise testen möchten.

71
J c

Fügen Sie der Site eine Seite hinzu und rufen Sie Session.Abandon () auf.

9
John Sheehan

Die einfachste Möglichkeit wäre, die Seite in zwei verschiedenen Registerkarten zu öffnen und die Abmeldung auf einer anderen Registerkarte würde die Sitzung auf der ersten Registerkarte automatisch ablaufen lassen. Die meisten Browser teilen die Sitzung über die Registerkarte. Daher finde ich es sehr einfach, ohne irgendetwas in web.config zu ändern. Auf diese Weise können Sie auch testen, ob eine bestimmte Funktion die Umleitung zur Anmeldung nicht ausführt, wenn die Sitzung abläuft.

5

Verkürzen Sie das Timeout.

4
nportelli

Bounce den AppPool und die Session geht verloren.

wenn Sie keinen direkten IIS -Zugriff haben, können Sie Web.Config öffnen und speichern, um dasselbe zu tun (Verwenden Sie keinen Editor, da dies die Kodierung beeinträchtigt).

4
FlySwat

Sie können das Timeout in Ihrer Webkonfiguration ändern

 <authentication mode="Forms">
      <forms timeout="10" protection="All" slidingExpiration="true" loginUrl="~/login.aspx" cookieless="UseCookies"/>
 </authentication>
3

Wenn Sie Ihre Sitzungsinformationen in einem Cookie speichern, können Sie versuchen, Ihre Cookies zu löschen.

2
Petey

Bereiten Sie den App-Pool auf dem Server wieder auf.

1
Chris Cudmore

Normalerweise verwende ich den Sitzungsstatusserver ASP .NET. Neben anderen Vorteilen während der Entwicklung kann ich einfach den .NET-Statusdienst ASP neu starten, um die Sitzung abzubrechen. Wenn Sie den Statusserver verwenden, führen Sie einfach services.msc aus und starten Sie den "ASP .NET State Service" neu.

0
Mehdi Maujood

Sie haben zwei Möglichkeiten: -

1- Verringern Sie die Sitzungszeit in web.config. 2- Starten Sie IIS oder den Anwendungspool neu.

0
Zeeshan Umar