2015-01-09 69 views
-1
HttpContext.Current.Response.Redirect("~/default.aspx"); 

,當我在Session_End中Global.asax中 錯誤使用此代碼對我說:重定向從Global.asax中

Object reference not set to an instance of an object.

爲什麼?

+0

的可能重複[如何處理在Global.asax中會話結束?(http://stackoverflow.com/questions/621744/how-to-handle-session -end-in-global-asax) – Win

回答

1

Session_End中不是一個事件它被應用程序的用戶調用,當會話超時時,服務器會調用它。所以當你試圖訪問HttpContext時,它是空的,因爲沒有HttpContext來訪問(沒有用戶正在與你的站點進行某種交互)。

無論你做什麼,試圖重定向一個不存在的HttpContext都會失敗。

+0

現在我在做什麼重定向session_end? – Ali

+3

在Session_End中重定向是沒有意義的,因爲沒有什麼可以重定向。 Session_End事件是當會話超時,沒有用戶重定向。這只是服務器端。 –

1

當事件SessionEnd被提出時,請求然後響應爲空。

HttpContext.Current.Response //this is null 

這是故意的:會議要求中沒有結束,但是當會話超時

它通常(默認配置)上次請求之後會發生20分鐘。

由於沒有請求也沒有響應。

You need to understand better how Asp.net Session State works

無論如何,如果你想如果會話已過期,您可以檢查存儲在會議的變量之一,將用戶重定向到一個頁面:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["YOUR_VAR_NAME"]==null) 
    { 
     Response.Redirect("~/default.aspx"); 
    } 
} 
0

Session_End由服務器根據內部計時器在內部觸發。因此,當發生這種情況時,沒有HttpRequest相關聯。這就是爲什麼Response.Redirect或Server.Transfer沒有意義並且不起作用的原因。

我希望上述信息將有助於