當前位置:成語大全網 - 書法字典 - 為什麽在ASP.NET切換頁面時會話會丟失?

為什麽在ASP.NET切換頁面時會話會丟失?

問:為什麽某些機器上的會話偶爾會丟失?

回答:可能和機器的環境有關,比如防火墻或者殺毒軟件。嘗試關閉防火墻。

問:為什麽調用Session時Session_End方法沒有觸發?嫌棄?

答:首先,Session_End方法只支持InProc類型的會話。其次,要觸發Session_End方法,必須有壹個會話(即該會話已在系統中使用),並且必須至少完成壹個請求(該方法將在該請求中調用)。

問:為什麽我在InProc模式下使用時經常丟失會話?

答:這個問題通常是由應用程序被回收引起的,因為當使用進程內會話時,會話保存在aspnet_wp進程中,當進程被回收時,會話自然會消失。您可以通過查看系統的事件查看器來獲取信息,以確定該進程是否被回收。

請參考:

在ASP.NET應用程序中,會話變量會間歇性丟失

/default.aspx?scid = kben-us;Q316148

1.0中還有壹個bug會導致工作進程被回收並重新啟動。此錯誤已在1.1和sp2中修復。

有關此錯誤的更多信息,請參考:

Aspnet工作進程(Aspnet_wp.exe)被意外回收。

/default.aspx?scid = kben-us;Q321792

問:當會話超時或被放棄時,為什麽新會話的ID與原始會話的ID相同?

答:由於SessionID保存在客戶端瀏覽器的實例中,因此當會話超時後在服務器上重新建立會話時,將使用瀏覽器發送的SessionID,因此會話ID在會話超時並重新建立後不會更改。

問:為什麽每個請求的SessionID不同?

答:問題可能是由於沒有在會話中保存任何信息造成的,也就是說,該會話在程序中的任何地方都沒有使用。在會話中保存信息後,SessionID將始終與瀏覽器相關,並且此時的SessionID不會改變。

問:ASP和ASP.NET會喜歡這個課程嗎?

答:是的。但這是壹個復雜的過程。微軟已經提供了官方解決方案。請參考:/library/default.asp?URL =/library/en-us/dnaspp/html/converttoaspnet . ASP

問:什麽類型的對象可以保存在會話中?

答:這取決於使用的會話模式。使用進程中的會話時,您可以輕松保存任何對象。如果使用非InProc模式,則只能保存可以序列化和反序列化的對象。如果此時保存的對象不支持序列化,則不能在此模式(非InProc)的會話中保存它們。

問:為什麽不能使用響應。重定向和服務器。轉移方法以跳轉到Session_End中的頁面?

答:Session_End是壹個在服務器內部觸發的事件處理程序。它基於服務器內部的計時器,當事件被觸發時,服務器上沒有相關的HttpRequest對象,因此響應。重定向和服務器。此時無法使用轉移方法。

問:妳能在Session_End中獲取HttpContext對象嗎?

答:不需要,因為該事件不與任何請求相關聯,並且沒有基於該請求的上下文。

問:如何在Web服務中使用會話?

答:為了在Web服務中使用會話,有必要在Web服務的調用者中做壹些額外的工作,並且調用Web服務時使用的Cookie必須保存和存儲。有關詳細信息,請參考httpwebclientprotocol。MSDN文檔的cookie容器屬性。但是,如果您使用代理服務器訪問Web服務,由於框架的限制,兩者都不能* * *享受會話。

問:為什麽我在自定義自己的HttpHandler時不能使用會話?

答:在實現自己的HttpHandler時,如果要使用Session,則必須實現以下兩個標記接口之壹:IRequiresSessionState和IReadOnlySessionState。沒有辦法實現這些接口,但是標記接口與使用INamingContainer接口相同。

問:當我使用Webfarm時,為什麽當我重定向到另壹個web服務器時會話會丟失?

答:詳情請參考:

PRB:如果使用SqlServer或StateServer會話模式,會話狀態將在Web場中丟失

/default.aspx?scid = kben-us;325056

問:為什麽我的會話在application _ onacquirerequeststate方法中無效?

答:會話僅在http應用程序後有效。調用acquirerequeststate事件。

詳情請參考:

/library/default.aspURL =/library/en-us/CP guide/html/cpconhandlingpublicevents . ASP

問:如果使用Cookies,我如何從HTTP頁面定向到HTTPS?

答:請嘗試以下方法:

string original URL =“/FX test 3/sub/foo 2 . aspx“;

string modified URL =“/default . aspx?scid = kben-us;837376

問:如何刪除會話變量?

答:要刪除會話變量,可以使用HttpSessionState。Remove()方法。

問:有沒有辦法知道應用程序的會話在運行時占用了多少內存?

a:沒有,目前這個數值無法驗證,至少我還沒有看到這個信息。但是可以通過性能監視器和程序代碼粗略地估計壹個值。

問:當頁面中有框架集時,我發現每個框架中顯示的頁面的SessionID在第壹次請求時是不同的。為什麽?

答:原因是妳的框架集被放置在htm頁面而不是ASPX頁面上。

在正常情況下,如果壹個框架集是壹個aspx頁面,當妳請求壹個頁面時,它會首先將請求發送到Web服務器,此時它已經獲得了SessionID,然後瀏覽器會單獨請求框架中的其他頁面,這樣所有頁面的SessionID都是相同的,即框架集頁面的SessionID。

但是,如果您將HTML頁面用作框架集頁面,則第壹個請求將是Html頁面。當頁面從服務器返回時,沒有生成會話,然後瀏覽器將請求框架中的頁面,這樣這些頁面將生成自己的SessionID,因此在這種情況下會出現此問題。當您刷新頁面時,SessionID將保持不變,它是上壹個請求頁面的SessionID。

問:我可以將不同應用程序的會話保存在同壹SQL Server服務器的不同數據庫中嗎?

答:是的,請參考:

修復:對SQL Server會話狀態的所有應用程序使用壹個SQL數據庫可能會導致瓶頸

/default.aspx?scid = kben-us;836680

問:我可以在Session_End獲取有效的HttpSessionState和HttpContext對象嗎?

答:您可以在該方法中獲取HttpSessionState對象,並且可以通過使用Session直接訪問它。但是,無法獲取HttpContext對象,因為該事件不與任何請求相關聯,因此沒有上下文對象。

問:為什麽我在SQLServer模式下使用會話時它不會過期?

答:在SqlServer模式下,Session的過期是通過註冊SQL代理完成的。請檢查您的SQL代理是否正在運行。

問:在我將EnableSessionState設置為“ReadOnly”後,我仍然可以在InProc模式下修改session的值。為什麽?

答:即使EnableSessionState標記為ReadOnly,用戶仍然可以在InProc模式下編輯會話。唯壹的區別是會話在請求期間不會被鎖定。

問:如何避免在鏈接SQL時指定密碼?

答:使用可信鏈接或使用加密鏈接字符串。有關這方面的更多信息,請參考:

如何使用ASP.NET實用工具加密憑據和會話狀態連接字符串

/default.aspx?scid = kben-us;329290

問:我如何在自己的課堂上使用會話?

答:可以使用HttpContext。當前。會話如下:

HttpContext。current . Session【“Session key“】=“Session value“;

同樣,您可以以這種方式使用Application對象。

問:為什麽我的請求在切換到SQLServer模式後被掛起?

答:檢查會話中存儲的所有對象是否都可以存儲在SQLServer模式下,即這些對象必須支持序列化。

問:當會話設置為無cookieless時會發生什麽?

答:當cookieless設置為true時,主要有以下約束:

1.頁面中不能使用絕對鏈接。

2.在應用程序中切換Http和Https時,還需要完成其他壹些步驟。

如果妳發送壹個鏈接給別人,此時的URL將包含會話ID的信息,因此兩個人將共享壹個會話。

問:我可以在數據庫中保存會話嗎?

答:當然可以,詳情請參考:/default.aspx?scid = kben-us;311209