2012-12-12 13 views
8

Próbuję ustawić cookie w Application_EndRequest w Global.asax.vb jak sugeruje hereApplication_EndRequest nie znalezienie Sesja

Pisałem kod folowing, cookie dostaje ERROR wartość. Dlaczego sesja nie jest dostępna?

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 

Odpowiedz

11

Sesja już nie istnieje w wydarzeniu Application_EndRequest.

Application_PostRequestHandlerExecute jest wywoływana po wykonaniu kodu z aplikacji, ale przed wydaniem SessionState.

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

Szukam czegoś, co wykonuje po każdym żądaniu HTTP, myślałem, że 'Application_EndRequest' robi to. Sesja nie powinna być wydana między żądaniami, tylko pod koniec sesji. – JNF

+3

Nie jest to sesja, która została wydana, ale SessionState, jej kontrola jest zwracana na serwer. To zdarzenie jest uruchamiane dla każdego żądania, zaraz po tym, jak załatwiłeś żądanie (zwane również "twoim kodem"). –