Verhindern eines ASP.NET-Sitzungszeitlimits bei Verwendung von Silverlight

8

Ich schreibe ein Programm, das sowohl ein ASP.NET-Konfigurationssystem als auch eine Silverlight-Anwendung hat. Die meisten Benutzer bleiben auf der Silverlight-Seite und besuchen die ASP.NET-Site nicht, außer sich einzuloggen usw.

Das Problem ist, ich brauche die Sitzung, um für Authentifizierungszwecke aktiv zu bleiben, aber die Sitzung wird Timeout, auch wenn der Benutzer die Funktionen der Silverlight App verwendet.

Irgendwelche Ideen?

    
Russell Patterson 30.06.2009, 21:11
quelle

3 Antworten

12

Auf der Seite, die das Silverlight-Steuerelement hostet, könnten Sie einen JavaScript-Timer einrichten und alle 5 Minuten einen Ajax-Aufruf an einen HTTP-Handler (.ashx) ausführen, um die Sitzung am Leben zu erhalten. Stellen Sie sicher, dass Ihre Handler-Klasse IRequiresSessionState implementiert.

Ich empfehle den Handler, weil es einfacher ist, den zurückgegebenen Antworttext zu steuern, und er ist leichter als eine aspx-Seite.

Sie müssen auch den Antwort-Cache richtig einstellen, um sicherzustellen, dass der Browser den Ajax jedes Mal aufruft.

AKTUALISIEREN

Hier ist der Beispielcode für einen HttpHandler

%Vor%

Wenn Sie jQuery verwenden, können Sie dies auf Ihrer Host-aspx-Seite

ablegen %Vor%

Das Intervall liegt in Millisekunden, daher wird mein Beispiel alle 5 Sekunden einen Ping-Befehl senden. Wahrscheinlich möchten Sie, dass es sich um eine größere Zahl handelt. Fiddler ist ein großartiges Werkzeug zum Debuggen von Ajax-Aufrufen, wenn Sie es nicht verwenden, starten Sie.

    
NerdFury 30.06.2009, 21:27
quelle
0

Ich habe tatsächlich einen ziemlich coolen Hack gefunden, der einen iframe auf der gleichen Seite wie die silverlight-Anwendung enthält. Der Iframe enthält eine aspx-Webseite, die sich alle (Session.Timeout - 1) Minuten aktualisiert. Dies hält die Sitzung so lange am Leben, wie lange die silverlight App geöffnet ist.

Um dies zu tun:

Erstellen Sie eine asp.net-Seite namens "KeepAlive.aspx". Fügen Sie im Kopfbereich dieser Seite Folgendes hinzu:

%Vor%

Fügen Sie im Code hinter der Datei Folgendes hinzu:

%Vor%

Fügen Sie nun auf derselben Seite wie die silverlight App Folgendes hinzu:

%Vor%

Jetzt bleibt die asp.net-Sitzung aktiv, während die Silverlight-App verwendet wird!

    
Russell Patterson 30.06.2009 21:19
quelle
0

Der Ajax-Ping / HttpHandler-Ansatz ist gut, aber die JQuery $ .get-Funktion erwartet ein JSON-Ergebnis und löst einen Javascript-Parse-Fehler aus.

Ich habe den Ping-HttpHandler modifiziert, um "{}" anstelle von "OK" zurückzugeben, und das funktionierte besser.

    
Kerry Todyruik 10.11.2009 23:24
quelle