2012-12-12 6 views
8

Ich versuche, ein Cookie in Application_EndRequest in Global.asax.vb gesetzt als here vorgeschlagenApplication_EndRequest finden nicht Session

ich den Folowing Code geschrieben haben, Cookie erhält ERROR Wert. Warum ist keine Sitzung verfügbar?

Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) 
    Dim context As HttpContext = HttpContext.Current 
    If Not context.Session Is Nothing Then 
     context.Response.Cookies("T").Value = context.Session("T") 
    Else 
     context.Response.Cookies("T").Value = "ERROR" 
    End If 
End Sub 

Antwort

11

Die Sitzung existiert nicht mehr im Application_EndRequest Ereignis.

Application_PostRequestHandlerExecute wird aufgerufen, nachdem der Code aus Ihrer Anwendung ausgeführt wird, aber bevor die SessionState freigegeben wird.

Sub Application_PostRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs) 
    Dim context As HttpContext = HttpContext.Current 
    If Not context.Session Is Nothing Then 
     context.Response.Cookies("T").Value = context.Session("T") 
    Else 
     context.Response.Cookies("T").Value = "ERROR" 
    End If 
End Sub 
+0

Ich suche nach etwas, das nach jeder HTTP-Anfrage ausgeführt wird, dachte ich 'Application_EndRequest' tut das. Die Sitzung sollte erst am Ende der Sitzung zwischen den Anfragen freigegeben werden. – JNF

+3

Es wird nicht die Sitzung freigegeben, sondern der SessionState. Die Steuerung wird an den Server zurückgegeben. Dieses Ereignis wird für jede Anfrage ausgelöst, unmittelbar nachdem Sie die Anfrage bearbeitet haben (auch "Ihr Code" genannt). –