2013-01-06 25 views
32

Widziałem kilka pytań (Here i Here), ale nie odpowiadają one na moje pytanie. Próbuję wywołać Ajax przy użyciu pliku "ajax.ashx", oraz w funkcji dostępu do sesji. Z jakiegoś powodu wartość obiektu Session sama w sobie jest pusta.HttpContext.Current.Session ma wartość null w pliku Ashx

Przykład zastosowania:

Session = HttpContext.Current.Session // This is null 

Lub:

public virtual void ProcessRequest(HttpContext context) 
{ 
    System.Web.SessionState.HttpSessionState Session = context.Session; 
    // This is null 
} 

w pliku web.config:

<sessionState timeout="1800"></sessionState> 
+0

Możliwe duplikaty http://stackoverflow.com/questions/2156524/asp-net-session-is-null-in-ashx-file, ale ma to również dobrą odpowiedź i komentarze. – goodeye

Odpowiedz

70

Należy dodać na swojej obsługi IRequiresSessionState na deklaracji nim jako :

public class YourHandleName : IHttpHandler, IRequiresSessionState 
{ 
... 

Domyślnie programy obsługi nie są połączone z sesją, aby zachować je minimum, dodając IRequiresSessionState, które łączysz z sesją.

+0

Należy zauważyć, że może to również być dziedziczone, jeśli wszystkie klasy .ASHX.CS dziedziczą z tej samej klasy, a ta klasa ma interfejs IRequiresSessionState, będzie można również uzyskać dostęp do bieżącej sesji w każdej procedurze obsługi. –

+2

@StevendeSalas Ok, ale tylko dla twojej wiedzy, lepiej unikać sesji, jeśli możesz, i szczególnie na handlerach, ponieważ strona lub handler, który żąda sesji, blokuje całą stronę wzywa aż do końca http://stackoverflow.com/ pytania/11629600/does-asp-net-web-formula-prevent-a-double-click-submission/11629664 # 11629664 – Aristos

+0

Fajne dzięki za informacje, zawsze coś nowego do nauki –

Powiązane problemy