2013-01-06 13 views
32

Ich sah einige Fragen (Here und Here), aber sie beantworten meine Frage nicht. Ich versuche, Ajax mit "ajax.ashx" -Datei und in Funktion, um auf Sitzung zuzugreifen. Aus irgendeinem Grund ist der Wert des Session-Objekts selbst null.HttpContext.Current.Session ist Null in Ashx-Datei

Anwendungsbeispiel:

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

Oder:

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

Im Web.config:

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

Mögliche Duplikat von http://StackOverflow.com/Questions/2156524/asp-net-Session-is-Null-in-ashx-file, aber das hat gute Antwort und Kommentare auch. – goodeye

Antwort

70

Sie auf Ihrem Handler davon die IRequiresSessionState auf die Erklärung hinzufügen müssen :

public class YourHandleName : IHttpHandler, IRequiresSessionState 
{ 
... 

Standardmäßig sind die Handler nicht mit der Sitzung verbunden, um sie minimal zu halten, indem Sie die IRequiresSessionState hinzufügen, die Sie mit der Sitzung verbinden.

+0

Beachten Sie, dass dies auch vererbt werden kann, wenn alle Ihre .ASHX.CS-Klassen von der gleichen Klasse erben und diese Klasse über die IRequiresSessionState-Schnittstelle verfügt, können Sie auch auf die aktuelle Sitzung in jedem Handler zugreifen. –

+2

@StevendeSalas Ok, aber nur für Ihr Wissen, ist besser, Sitzung zu vermeiden, wenn Sie können, und vor allem auf Handler, weil die Seite oder Handler, die die Sitzung anfordern, die gesamte Website Aufrufe sperren, bis endet http://stackoverflow.com/ fragen/11629600/does-asp-net-web-formulare-verhindern-ein-doppelklick-einreichung/11629664 # 11629664 – Aristos

+0

Cool danke für info, immer etwas neues zu lernen –