2013-01-06 36 views
32

我看到一些問題(HereHere),但它們不回答我的問題。 我想使用「ajax.ashx」文件調用Ajax,並在函數中訪問Session。 由於某些原因,Session對象本身的值爲null。HttpContext.Current.Session在Ashx文件中爲空

使用例如:

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

或者:

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

在Web.config:

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

可能的重複http://stackoverflow.com/questions/2156524/asp-net-session-is-null-in-ashx-file,但這也有很好的答案和意見。 – goodeye

回答

70

你必須在它的聲明爲增加您的處理程序IRequiresSessionState

public class YourHandleName : IHttpHandler, IRequiresSessionState 
{ 
... 

默認情況下,處理程序未與會話連接以使其保持最小值,方法是添加IRequiresSessionState將其附加到會話中。

+0

請注意,如果所有.ASHX.CS類都從同一個類繼承,並且該類具有IRequiresSessionState接口,那麼您也可以訪問每個處理程序中的當前會話,這也可以被繼承。 –

+2

@StevendeSalas好吧,但就你所知,如果可以,最好避免會話,尤其是處理程序,因爲請求會話的頁面或處理程序鎖定整個站點調用,直到結束爲止http://stackoverflow.com/問題/ 11629600/does-asp-net-web-forms-prevent-a-double-click-submission/11629664#11629664 – Aristos

+0

非常感謝您的信息,總是需要學習一些新東西 –

相關問題