2008-10-08 17 views
32

Ich mache ein Blackbox-Test einer ASP.Net-Website und ich muss verschiedene Session-Timeout-Szenarien testen.ASP.NET Session Timeout Testing

Ich bin mir nicht sicher, sie vollständig Session Timeouts verkapselt. Andere als 20 Minuten eine Seite offen zu lassen, gibt es eine einfachere Möglichkeit, ein Sitzungszeitlimit zu erzwingen?

+1

Wenn Sie Black Box Test sagen, nehme ich an, dass Sie keinen Zugriff auf Code, Konfigurationsdateien oder IIS haben? :) –

+0

Beantworten Sie die Frage des OP nicht, aber im Zusammenhang: Wenn Sie nur das Verhalten testen müssen, wenn die Zeitüberschreitung korrekt ist oder nicht, starten Sie den Server nach der Anmeldung einfach neu.Die alte Sitzung wird ungültig –

Antwort

67

der Timeout-Abnahme

die einfachste und non-intrusive Weise, dies zu testen, ist wahrscheinlich nur die Timeout verringern zu einem ziemlich kleinen Nummer, wie 3 oder 5 Minuten. Auf diese Weise können Sie eine Pause von einigen Minuten einlegen, um eine längere Pause zu simulieren, ohne sich über Neustarts von Anwendungen oder spezielle Rücksetzcodes Gedanken machen zu müssen, die sich auf Ihre Testergebnisse auswirken.

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

Um das Timeout nur für Ihre Anwendung ändern, können Sie die folgenden web.config hinzufügen können Sie Ihre Anwendung:

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

Alternativ können Sie auch für Ihre Anwendung durch eine IIS-Konfigurationsdialog diese gleiche Einstellung ändern (Ich glaube, dass Sie immer noch eine web.config für Ihre Anwendung definiert haben müssen, ansonsten wird die Konfiguration bearbeiten deaktiviert).

Um darauf zuzugreifen, klicken Sie mit der rechten Maustaste auf Ihre Webanwendung in IIS und navigieren Sie zu Eigenschaften | Registerkarte ASP.NET | Konfiguration bearbeiten | Registerkarte Statusverwaltung | Sitzungszeitlimit (Minuten)

Beachten Sie, dass Sie diese Einstellung auch über Code ändern können. Wenn dies bereits erfolgt, wird die Einstellung in der Datei web.config ignoriert und Sie müssen eine andere Technik verwenden.

Anruf Session.Abandon()

Eine etwas intrusive Technik als eine niedrige Timeout-Einstellung wäre Session.Abandon() aufzurufen. Achten Sie jedoch darauf, dass Sie dies von einer Seite aufrufen, die von Ihrer Anwendung getrennt ist, da die Sitzung erst dann beendet wird, wenn alle Skriptbefehle auf der aktuellen Seite verarbeitet wurden.

Mein Verständnis ist, dass dies eine ziemlich saubere Möglichkeit wäre, Session-Timeouts zu testen, ohne auf sie zu warten.

Kraft ein Neustart der Anwendung

In einer Standardkonfiguration des Sitzungsstatus, können Sie durch Wegblasen die Sitzungen vollständig ein Session-Timeout simulieren, indem die Anwendung verursacht neu zu starten. Dies kann mehrere Arten erfolgen, von denen einige im Folgenden aufgeführt sind:

  • Recycle der app-Pool durch
    • das IIS-MMC-Snap-in
    • die Kommandozeile (iisapp/a AppPoolId/r)
    • modifizierende web.config, global.asax oder eine DLL in dem Verzeichnis ist
  • Restart IIS durch
    • der IIS-MMC-Snap-in
    • services.msc und der IIS-Verwaltungsdienst
    • die Befehlszeile (iisreset) Neustart

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

Tamper mit dem Staat Tracking-Mechanismus

Ihre Web-Anwendung Unter der Annahme, nicht mit einem „Cookie-less“ -Modus (standardmäßig wird Cookies verwendet werden) konfiguriert sind, können Sie das Cookie enthält die Sitzung entfernen ID aus dem Client-Browser.

Allerdings ist mein Verständnis, dass dies nicht wirklich simuliert eine Auszeit, da der Server immer noch der Sitzung bewusst ist, es wird nur niemand sehen, die es verwenden. Die Anfrage ohne eine Sitzungs-ID wird einfach als eine unsichtbare Anfrage behandelt, die eine neue Sitzung benötigt, die möglicherweise nicht das ist, was Sie testen möchten.

1

Recycle den App-Pool auf dem Server.

9

eine Seite auf der Website hinzufügen und rufen Session.Abandon()

2

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

+0

Dies würde wahrscheinlich funktionieren, weil die SessionID in Cookies gespeichert ist –

4

Verringern Sie die Zeitüberschreitung.

+0

Dies funktioniert nicht, wenn sie das Zeitlimit im gesamten Code angeben, sonst würde die Einstellung der Zeitüberschreitung in web.config funktionieren –

+0

Der Code sollte wahrscheinlich die Wert von einer Art Konfigurationsdatei. – tpower

4

Bounce der AppPool und Sitzung wird verloren gehen.

Wenn Sie keinen direkten IIS-Zugriff haben, können Sie Web.Config öffnen und speichern, um das gleiche zu tun (Verwenden Sie nicht den Editor, es verschraubt die Codierung).

+5

Haben Sie weitere Informationen über den Editor, der die Kodierung verschraubt? Ich hatte noch kein Problem mit Notepad (noch), auch dieser MS-Support-Artikel beschreibt die Verwendung von Editor zum Bearbeiten von web.config, "Sie können eine Web.config-Datei mit einem Texteditor wie Editor erstellen.": Http://support.microsoft.com/kb/815179 –

2

Sie können den Timeout in Ihrem webconfig ändern

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

Sie haben zwei Möglichkeiten: -

1- in web.config die Session-Timeout verringern. 2- Starten Sie IIS oder den Anwendungspool neu.

5

Der einfachste Weg wäre, die Seite in zwei verschiedenen Registerkarten zu öffnen und auf anderen Registerkarten abzumelden, würde die Sitzung automatisch in der ersten Registerkarte ablaufen. Die meisten Browser teilen sich die Sitzung über die Registerkarte. So finde ich es sehr einfach, ohne etwas in web.config zu ändern. Auf diese Weise können Sie testen, ob eine bestimmte Funktion die Weiterleitung zur Anmeldung nach Ablauf der Sitzung nicht verarbeitet.

0

Ich verwende normalerweise den ASP .NET Session State Server. Abgesehen von anderen Vorteilen während der Entwicklung kann ich den ASP.NET-Statusdienst einfach neu starten, um die Sitzung abzubrechen. Wenn Sie den Statusserver verwenden, führen Sie einfach services.msc aus und starten Sie den ASP.NET-Statusdienst neu.