2016-05-10 4 views
0

Ich habe Probleme beim Auffinden, warum die Sitzung in einer Webanwendung neu gestartet wird.Warum sollte Session_Start neu geladen werden, ohne dass Session_End ausgelöst wird?

Ich habe platziert Code in beiden Session_End oder Application_End Verfahren, um zu versuchen und zu verfolgen, was geschieht, aber keiner dieser beiden Verfahren werden im Code vor der Sitzung neu gestartet und feuert die Session_Start Prozedur wieder erreicht.

Weiß jemand, was dazu führen würde, dass die Session_Start Prozedur neu startet, ohne die Session_End oder Application_End Prozeduren auszulösen?

Grundsätzlich ist es Code in der Session_Start, die Session-Variablen und Code in der Session_End setzt, die die Anmeldung versucht, warum die Sitzung beendet

Es gibt 100 oder mehr aspx Seiten mit VB-Code hinter ihnen allen auf der Website und es sieht so aus, als würde die Sitzung nach dem Zufallsprinzip gelegentlich bis zu 3 Mal neu gestartet, während die Startseite geladen wird. Ich habe eine Pause in der global.asax Seite innerhalb der Session_Start-Prozedur gesetzt und es bricht dort, so kann ich sagen, wenn es neu lädt und verliert alle Sitzungsvariablen in einem der ASPX-Seitencode hinter gesetzt.

Ich kenne einige häufige Ursachen wie wie der Ordner App_Data auf bestimmte Dateien oder Ordner zu schreiben, und die App-Pool zurückgeführt wird, aber ich kann nicht auf die Spur scheinen, warum dies geschieht, wenn Session_End oder Application_End nie Feuer und ich kann nicht einloggen der Grund, warum es endete.

Ich erbte dieses „Projekt“ und ich an dieser Stelle meinen Weg durch den Code „alata“ so Dank für Sie jede Hilfe können Sie mir zu diesem Thema geben kann ...

der Server IIS7, ASP ausgeführt wird. NET und der Code ist in VB.NET, ich habe auch 'sessionState mode = "InProc"' in der Datei web.config enthalten, um sicherzustellen, dass die Sitzungsprozeduren verwendet werden.

Dies ist Code VB im Session_Start Verfahren

HttpContext.Current.Session.Item("SessionMessageView") = "no" 
    HttpContext.Current.Session.Item("DefaultMenuName") = "Default" 
    HttpContext.Current.Session.Item("RootVirtualPath") = "/" 
    HttpContext.Current.Session.Item("BlockerTested") = False 
    HttpContext.Current.Session.Item("BlockerTurnedOn") = False 
    HttpContext.Current.Session.Item("IsMobileBrowser") = False 

Diese VB-Code in den beiden Session_End und Application_End Verfahren

Dim runtime As HttpRuntime = DirectCast(GetType(System.Web.HttpRuntime).InvokeMember("_theRuntime", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.[Static] Or System.Reflection.BindingFlags.GetField, Nothing, Nothing, Nothing), HttpRuntime) 
    If runtime Is Nothing Then 
     Return 
    End If 
    Dim shutDownMessage As String = DirectCast(runtime.[GetType]().InvokeMember("_shutDownMessage", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.GetField, Nothing, runtime, Nothing), String) 
    Dim shutDownStack As String = DirectCast(runtime.[GetType]().InvokeMember("_shutDownStack", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.GetField, Nothing, runtime, Nothing), String) 
    If Not System.Diagnostics.EventLog.SourceExists(".NET Runtime") Then 
     System.Diagnostics.EventLog.CreateEventSource(".NET Runtime", "Application") 
    End If 
    Dim log As New System.Diagnostics.EventLog() 
    log.Source = ".NET Runtime" 
    log.WriteEntry([String].Format(vbCr & vbLf & vbCr & vbLf & "_shutDownMessage={0}" & vbCr & vbLf & vbCr & vbLf & "_shutDownStack={1}", shutDownMessage, shutDownStack), System.Diagnostics.EventLogEntryType.[Error]) 

Wenn ich nur, warum die Session_End Verfahren nicht feuern konnte herauszufinden ist, während die Session_Start Prozedur mehrere Male ausgelöst wird, kann ich möglicherweise herausfinden, warum die Sitzung neu gestartet wird.

+0

welche Sprache ? welcher Server? etwas Code? –

+0

IIS7, ASP.NET VB, (und ich habe in der web.config) Ich habe eine Anzahl von Sitzungsvariablen in der Sitzung starten Verfahren wie folgt: –

+0

Ich habe eine Sitzung festgelegt Variablen in der wie folgt aus: Sub Session_Start (ByVal Absender als Gegenstand, ByVal e As EventArgs) HttpContext.Current.Session.Item ("SessionMessageView") = "no" HttpContext.Current.Session.Item ("DefaultMenuName ") = "Default" HttpContext.Current.Session.Item (" RootVirtualPath ") = "/" ... End Sub Und dies ist der Session-Code Ende: Sub Session_End (ByVal Absender als Gegenstand, ByVal e As EventArgs) Dim Runtime als Httpruntime = ... End Sub Hoffnung, dass Sie genug geben gehen –

Antwort

0

Mit Hilfe von James habe ich das Problem entdeckt. Neuer Code wurde hinzugefügt, um festzustellen, ob der Browser des Benutzers Cookies akzeptiert, und dann wurde getestet, dass Cookies deaktiviert sind. Wenn Cookies aktiviert sind, geschieht dies nicht und die Sitzung wird nicht neu gestartet. Es scheint, dass, wenn Cookies von einem Browser nicht akzeptiert werden und Sie versuchen, ein Cookie in diesem Browser zu speichern, dass die Sitzung wegen des Fehlers neu gestartet wird, ohne End_Session abzubrechen!

Jetzt denke ich, wir müssen den Cookie-Test überdenken und eine Möglichkeit finden, ein Flag zu speichern, das irgendwie mit dem Benutzer verknüpft ist und angeben kann, ob Cookies akzeptiert werden, ohne ein Cookie auf dem Computer des Benutzers zu speichern ... hmmmm

Vielen Dank für Ihre Unterstützung auf diesem ... manchmal ist es die kleinen Dinge, die Sie stolpern ... ich erinnere an dem sagen, dass eine Erhöhung um Fehler zu Änderungen im Code proportional ist

1

Sehen Sie diese Frage in Bezug auf Session_Start: Session_Start firing multiple times on default ASP.NET MVC3 project

Beachten Sie, dass Session_End wird nie ausgeführt, wenn Sie SQLServer Session State-Speicher verwenden, oder in der Tat alles andere als InProc Modus in Ihrer web.configsessionState Richtlinie.

+0

Danke für die Artikel-Referenz James! Nach dem Durchlesen und mehreren Links habe ich das Problem entdeckt. Neuer Code wurde hinzugefügt, um festzustellen, ob der Browser Cookies akzeptiert und dann mit deaktivierten Cookies getestet wurde. Wenn Cookies aktiviert sind, geschieht dies nicht! –

Verwandte Themen