2010-10-06 97 views
1

我有一個處理程序,這樣,使用IRequiresSessionState:處理器與IRequiresSessionState不會擴展會話超時

public class MyHandler : IHttpHandler, IRequiresSessionState 
{ 
    // code 
} 

在代碼中,我能夠讀取和設置會話值。我也檢查確保調用者登錄。這一切都正常工作。

該網站使用窗體身份驗證,所以在web.config中,我有這樣的:

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" timeout="10" slidingExpiration="true"></forms> 
</authentication> 

的問題是,AJAX從客戶端到服務器的代碼MyHandler調用不延長的壽命會!

所以,即使用戶正在忙於從服務器發送和接收數據,它們在最後一次完整頁面加載10分鐘後也會超時。

在處理程序中,我試過特別改變一個值是每個調用的會話,但是甚至不會延長超時。

有什麼建議嗎?

回答

0

終於有了解決方案......這種。

我放棄了試圖讓處理程序來完成這項工作,而是調用了一個普通的ASPX頁面。在該頁面中,我刪除了HTML代碼,並使用Response.Write(...)發回我想要的一些JSON。然而,即使如此,我的會議沒有被延長!

我終於意識到,在PreRender事件中,我使用了Response.ClearHeaders()。這是問題所在。事實證明,Forms身份驗證系統在需要時正在更新會話票證cookie,但在我的代碼運行之前將其添加到頭部。所以當我清除標題時,我在刪除新的cookie之前將其發送到瀏覽器。

因此,如果您遇到未延期的會話問題,請檢查以確保您的代碼未使用ClearHeaders()