亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

在ASP.NET中使用Session常見問題集錦

2024-07-10 13:22:52
字體:
來源:轉載
供稿:網友

在壇子里經??吹揭恍╆P于Session的問題,下面做一個總結,希望對大家有所幫助:

問:為什么Session在有些機器上偶爾會丟失?
答:可能和機器的環境有關系,比如:防火墻或者殺毒軟件等,嘗試關閉防火墻。

問:為什么當調用Session.Abandon時并沒有激發Session_End方法?
答:首先Session_End方法只支持InProc(進程內的)類型的Session。其次要激發Session_End方法,必須存在Session(即系統中已經使用Session了),并且至少要完成一次請求(在這次請求中會調用該方法)。

問:為什么當我在InProc模式下使用Session會經常丟失?
答:該問題通常是由于應用程序被回收導致的,因為當使用進程內Session時,Session是保存在aspnet_wp進程中,當該進程被回收Session自然也就沒有了,確定該進程是否被回收可以通過查看系統的事件查看器獲得信息。
 具體信息請參考:
 Session variables are lost intermittently in ASP.NET applications
 ?scid=kb;en-us;Q316148
 在1.0的時候也有一個bug會導致工作進程被回收并重啟,該bug已經在1.1和sp2中修復。
 關于該bug的詳細信息請參考:
 ASP.NET Worker Process (Aspnet_wp.exe) Is Recycled Unexpectedly.
 ?scid=kb;en-us;Q321792

問:為什么當Session超時或者Abandoned后,新Session的ID和原來的相同?
答:因為SessionID是保存在客戶端瀏覽器的實例里,當Session超時在服務器重新建立Session時,將使用瀏覽器傳來的SessionID,所以當Session超時后,再重新建立后SessionID并不變。

問:為什么每次請求的SessionID都不相同?
答:該問題可能是沒有在Session里面保存任何信息引起的,即程序中任何地方都沒有使用Session。當Session中保存信息之后SessionID將一直和瀏覽器相關,此時的SessionID將不會在變化。

問:ASP和ASP.NET之間是否可以共享Session?
答:可以。但是這是一個比較復雜的過程,微軟提供了官方的解決方案,請參考:?url=/library/en-us/dnaspp/html/ConvertToASPNET.asp

問:什么類型的對象可以保存在Session里?
答:這依賴使用的Session的模式,當使用的是進程內(InProc)的Session那么可以輕松的保存任何對象。如果你使用了非InProc的模式,則只能保存可以序列化和反序列化的對象,如果此時保存的對象不支持序列化,則不能保存到這種模式(非InProc)的Session里。

問:為什么在Session_End中不能使用Response.Redirect和Server.Transfer方法跳轉頁面?
答:Session_End是一個在服務器內部激發的事件處理函數。它是基于一個服務器內部的計時器的,在激發該事件時服務器上并沒有相關的HttpRequest對象,因此此時并不能使用Response.Redirect和Server.Transfer方法。

問:在Session_End中是否可以獲得HttpContext對象?
答:不行,因為這個事件并沒有和任何的請求(Request)相關聯,沒有基于請求的上下文。

問:在Web Service中該如何使用Session?
答:為了在Web Service中使用Session,需要在Web Service的調用方做一些額外的工作,必須保存和存儲調用Web Service時使用的Cookie。詳細信息請參考MSDN文檔的HttpWebClientProtocol.CookieContainer屬性。然而,如果你使用代理服務器訪問Web Service由于框架的限制,兩者不能共享Session。

問:在自定義自己的HttpHandler的時候,為什么不能使用Session?
答:在實現自己的HttpHandler的時候,如果希望使用Session必須實現下面的兩個標記接口中的一個:IRequiresSessionState和IReadOnlySessionState,這些接口沒有任何方法需要實現,只是一個標記接口和使用INamingContainer接口的方法一樣。

問:當我使用webfarm時,當我重定向到其他的Web服務器時Session為什么會丟失?
答:詳細信息請參考:
 PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode
 ?scid=kb;en-us;325056

問:為什么我的Session在Application_OnAcquireRequestState方法中無效?
答:Session只有在HttpApplication.AcquireRequestState事件調用以后才會有效。
 詳細信息請參考:
 ?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp

問:如果使用了cookieless,我該如何從HTTP頁面定向到HTTPS?
答:請嘗試下面的方法:
 String originalUrl = "/fxtest3/sub/foo2.aspx";
 String modifiedUrl = "https://localhost" + Response.ApplyAppPathModifier(originalUrl);
 Response.Redirect(modifiedUrl);

問:Session在global.asax中的那些事件中有效?
答:Session只有在AcquireRequestState事件之后有效,該事件之后的事件都可以使用Session。


問:如何獲得當前Session中保存的所有對象?
答:可以通過遍歷所有的Session.Keys來獲得。代碼如下:
ArrayList sessionCollection = new ArrayList();
foreach (string strKey in Session.Keys){
  sessionCollection.Add(Session[strKey]);
}

問:是否可以在不同的應用程序中共享Session?
答:不能直接共享??梢詤⒖既绾卧贏SP和ASP.NET之間共享Session。

問:Session.Abandon和Session.Clear有何不同?
答:主要的不同之處在于當使用Session.Abandon時,會調用Session_End方法(InProc模式下)。當下一個請求到來時將激發Session_Start方法。而Session.Clear只是清除Session中的所有數據并不會中止該Session,因此也不會調用那些方法。

問:為了可以順序訪問Session的狀態值,Session是否提供了鎖定機制?
答:Session實現了Reader/Writer的鎖機制:
 當頁面對Session具有可寫功能(即頁面有<%@ Page EnableSessionState="True" %>標記),此時直到請求完成該頁面的Session持有一個寫鎖定。
 當頁面對Session具有只讀功能(即頁面有<%@ Page EnableSessionState="ReadOnly" %>標記),此時知道請求完成該頁面的Session持有一個讀鎖定。
 讀鎖定將阻塞一個寫鎖定;讀鎖定不會阻塞讀鎖定;寫鎖定將阻塞所有的讀寫鎖定。這就是為什么兩個框架中的同一個頁面都去寫同一個Session時,其中一個要等待另一個(稍快的那個)完成后,才開始寫。

問:Session平滑超時意味著什么?
答:Session平滑超時意味著只要你的頁面訪問(使用)了Session,超時時間將被刷新(可以理解為重新計時),即從該頁面請求開始,將重新計算超時時間。但是,該頁面不能禁用Session。它會自動的訪問當前頁面的Session,刷新超時時間。

問:在global.asax中的事件處理函數中Session為什么無效?
答:依賴于在哪個事件處理函數中使用Session,Session在AcquireRequestState事件之后才有效,該事件之后的所有事件處理函數都可以使用Session,之前的則不能。

問:當我寫一個依賴于當前應用的Session的組件時,為什么不能直接使用Session["Key"]獲得其值?
答:Session["Key"]實際上是this.Session["Key"],它是作為Page的一個屬性提供的,所以在你的組件中不能直接使用這個屬性。你可以通過下面的方式使用Session:
 HttpContext.Current.Session["Key"] = "My Seesion Value";

問:當我使用InProc模式保存Session時,此時的Session是保存在哪里?
答:不同的IIS的處理方式不同,
 當使用的是IIS5的時候Session是保存在aspnet_wp.exe的進程空間里的。
 當使用的是IIS6時,默認情況下所有的應用程序共享應用程序池,Session保存在w3wp.exe的進程空間中。

問:Session的超時設置是分鐘還是秒?
答:是分鐘,默認為20分鐘。

問:當頁面出現錯誤后我的Session是否將被保存?我需要在Session_End中處理一些清理工作,但是失敗了,為什么?
答:Session_End只有在Session運行在InProc模式下才會被執行。Session_End使用的帳號是運行aspnet_wp工作進程的帳號(這個可以在machine.config中設置)。因此,如果在Session_End方法里,使用集成安全性鏈接到SQL,它將使用aspnet_wp進程的帳號打開鏈接,此時成功與否則依賴于你的SQL的安全性設置。

問:為什么當我設置cookieless為true是我在重定向的時候會丟失Session?
答:當使用cookieless時,你必須使用相對路徑替換程序中的絕對路徑,如果使用絕對路徑ASP.NET將無法在URL中保存SessionID。
 例如:將/myDir/mySubdir/default.aspx換成../default.aspx即可。

問:如何將SortedList存儲到Session或者Cache里?
答:請參考下面的方法:
 SortedList x = new SortedList();
 x.Add("Key1", "ValueA");
 x.Add("Key2", "ValueB");
 保存到Session中:
 Session["SortedList1"] = x;
 使用下面方法獲得之:
 SortedList y = (SortedList) Session["SortedList1"];
 Chahe則同理。

問:我為什么會獲得這樣的錯誤信息“Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive”?
答:這個問題可能在一個已經安裝了Microsoft Visual Studio .NET開發環境的機器上,再安裝Window Sharepoint Server(WSS)后出現。
 WSS ISAPI過濾器會處理所有的請求。當你通過虛擬目錄瀏覽一個ASP.NET的應用程序時,ISAPI過濾器不會給文件夾目錄分配URL。
 解決方法是:不要再安裝了WSS的機器上使用Session。
 詳細信息請參考:
 Session state cannot be used in ASP.NET with Windows SharePoint Services
 ?scid=kb;en-us;837376

問:如何刪除Session變量?
答:想要刪除Session變量可以使用HttpSessionState.Remove()方法。

問:是否有辦法知道應用程序的Session在運行時占用了多少內存?
答:沒有。目前這個值時無法考證的,至少我現在還沒有看到這方面的資料。但是可以通過性能監視器以及程序代碼大概估算出來一個值。

問:當頁面中是否了frameset,發現在每個frame中顯示頁面的SessionID在第一次請求時都不相同,為什么?
答:原因是你的frameset是放在一個htm頁面上而不是ASPX頁面。
 在一般情況下,如果frameset是aspx頁面,當你請求頁面時,它首先將請求發送到Web服務器,此時已經獲得了SessionID,接著瀏覽器會分別請求Frame中的其他頁面,這樣所有頁面的SessionID就是一樣的,就是FrameSet頁面的SessionID。
 然而如果你使用Html頁面做FrameSet頁面,第一個請求將是HTML頁面,當該頁面從服務器上返回是并沒有任何Session產生,接著瀏覽器會請求Frame里面的頁面,這樣這些頁面都會產生自己的SessionID,所以在這種情況下就會出現這種問題。當你重新刷新頁面時,SessionID就會一樣,并且是最后一個請求頁面的SessionID。

問:是否可以將不同應用程序的Session保存在相同的SQL Server服務器的不同數據庫上。
答:可以,請參考:
 FIX: Using one SQL database for all applications for SQL Server session state may cause a bottleneck
 ?scid=kb;en-us;836680

問:在Session_End是我是否可以獲得有效的HttpSessionState和HttpContext對象?
答:你可以在這個方法中獲得HttpSessionState對象,可以直接使用Session來訪問即可。但是不能獲得HttpContext對象,因為該事件并沒有和任何請求相關聯,因此不存在上下文對象。

問:在SQLServer模式下使用Session,為什么我的Session不過期?
答:在SqlServer模式下,Session的過期是通過SQL Agent的注冊工作完成的,請檢查你的SQL Agent是否運行?

問:當我設置EnableSessionState為“ReadOnly”后,但是我在InProc模式下依然可以修改Session的值,這是為什么?
答:即使EnableSessionState標示為ReadOnly,但是在InProc模式下用戶依然可以編輯Session。唯一不同的是,在請求過程中Session將不會被鎖住。

問:我如何才能避免在鏈接SQL時指定密碼?
答:使用信任鏈接或者使用加密的鏈接串。有關這方面的詳細信息請參考:
 How To Use the ASP.NET Utility to Encrypt Credentials and Session State Connection Strings
 ?scid=kb;en-us;329290

問:我在我自己的類中該如何使用Session呢?
答:可以使用HttpContext.Current.Session方式使用,具體方法如下:
 HttpContext.Current.Session["SessionKey"] = "SessionValue";
 類似的你還可以使用這種方式使用Application對象。
 

問:為什么在切換成SQLServer模式后我的請求被掛起了?
答:檢查在Session里面是否都保存的是可以保存在SQLServer模式下的對象,即這些對象必須支持序列化。
 

問:當Session設置成cookieless后會有什么影響?
答:當把cookieless設置成true時,主要會有下面的約束:
 1、在頁面中不能使用絕對鏈接
 2、在應用程序中在除了Http和Https之間的切換時需要完成一些其他的步驟。
 如果發送一個鏈接給其他人,此時的URL里面將包含Session ID的信息,所以兩個人將公用一個Session。

問:是否可以將Session保存在數據庫中?
答:當然可以,詳細信息請參考:?scid=kb;en-us;311209

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色老头一区二区三区在线观看| 亚洲精品天天看| 亚洲黄页网在线观看| 国产成人精品视频| 91精品在线看| 欧美亚洲国产成人精品| 久久久伊人日本| 国产婷婷色综合av蜜臀av| 九九九久久国产免费| 久久91亚洲精品中文字幕| 91av中文字幕| 国产69精品久久久久9999| 91成品人片a无限观看| 国产精品亚洲网站| 一区二区三区四区精品| 日韩在线观看av| 久久天堂av综合合色| 中文字幕视频一区二区在线有码| 日韩视频在线免费| 亚洲资源在线看| 欧美最近摘花xxxx摘花| 成人www视频在线观看| 91啪国产在线| 久久久视频精品| 午夜精品国产精品大乳美女| 伦伦影院午夜日韩欧美限制| 精品国产1区2区| 日韩精品视频中文在线观看| 热久久这里只有精品| 国产狼人综合免费视频| 亚洲天堂久久av| 国产精品美腿一区在线看| 日韩av在线免费观看一区| 欧美国产亚洲精品久久久8v| 日韩成人高清在线| 亚洲精品wwwww| 亚洲丝袜在线视频| 在线一区二区日韩| 欧美乱大交xxxxx另类电影| 性欧美xxxx| 亚洲精品久久久久| 欧美性黄网官网| 久久精品成人一区二区三区| 欧美激情免费看| 欧美乱大交做爰xxxⅹ性3| 久久噜噜噜精品国产亚洲综合| 午夜精品久久久99热福利| 国内精品久久久久久中文字幕| 国产精品在线看| 少妇精69xxtheporn| 国产精品爽爽ⅴa在线观看| 日韩中文字幕在线| 久久久最新网址| 欧美午夜激情在线| 久久视频在线免费观看| 欧美伊久线香蕉线新在线| 91精品在线看| 欧美一级大胆视频| 欧美精品久久一区二区| 欧美诱惑福利视频| 亚洲欧美日韩一区二区三区在线| 色婷婷亚洲mv天堂mv在影片| 日韩免费在线免费观看| 亚洲桃花岛网站| 国产精品尤物福利片在线观看| 中文综合在线观看| 日韩免费中文字幕| 国外成人免费在线播放| 久久久亚洲影院| 亚洲精品国产综合久久| 日韩精品在线观看一区| 亚洲欧美综合区自拍另类| 日本国产欧美一区二区三区| 国产成人高清激情视频在线观看| 亚洲视频综合网| 精品福利在线看| 欧美激情第一页xxx| 久久精品国产69国产精品亚洲| 成人啪啪免费看| 日韩中文字幕欧美| 色综合久久悠悠| 中文字幕欧美精品日韩中文字幕| 日韩av在线影院| 97**国产露脸精品国产| 国产大片精品免费永久看nba| 中文字幕久热精品视频在线| 国内精品400部情侣激情| 色无极亚洲影院| xvideos亚洲人网站| 亚洲天堂网在线观看| 欧美疯狂性受xxxxx另类| 欧美人与物videos| 91欧美激情另类亚洲| 久久亚洲精品成人| 欧美国产激情18| 亚洲天堂一区二区三区| 久久久国产91| 国模精品一区二区三区色天香| 久久精品久久久久| 久久激情视频免费观看| 一道本无吗dⅴd在线播放一区| 国产一区二区动漫| 久久久久久国产精品| 亚洲无亚洲人成网站77777| 久久大大胆人体| 91久久国产综合久久91精品网站| 国产日产欧美a一级在线| 一区二区三区四区视频| 永久555www成人免费| 亚洲的天堂在线中文字幕| 精品久久久久久亚洲精品| 国产精品久久久av| 深夜福利一区二区| 成人免费视频在线观看超级碰| www.亚洲免费视频| 亚洲天堂影视av| 欧美肥臀大乳一区二区免费视频| 日韩欧美在线播放| 国产视频精品免费播放| 成人美女免费网站视频| 在线免费观看羞羞视频一区二区| 国产精品尤物福利片在线观看| 亚洲区在线播放| 国产精品第七十二页| 日韩免费电影在线观看| 91人成网站www| 国内免费久久久久久久久久久| 欧美日韩国产91| 日韩精品极品毛片系列视频| 国产视频福利一区| 日韩在线不卡视频| 日韩中文字幕av| 日韩av电影中文字幕| 久久久免费高清电视剧观看| 伊人成人开心激情综合网| 久久精品91久久久久久再现| 久久夜色精品亚洲噜噜国产mv| 精品福利樱桃av导航| 亚洲第一区中文字幕| 91色琪琪电影亚洲精品久久| 91在线直播亚洲| 不卡av电影在线观看| 亚洲成色777777在线观看影院| 久久精品久久久久久国产 免费| 日韩高清中文字幕| 亚洲女成人图区| 久久久精品国产网站| 91在线网站视频| 88国产精品欧美一区二区三区| 日韩精品高清视频| 正在播放欧美视频| 亚洲午夜av久久乱码| 国产精品欧美在线| 亚洲国产精品va在看黑人| 欧美极品美女电影一区| 欧美国产日韩一区二区| 欧亚精品在线观看| 国产激情综合五月久久| 亚洲a级在线观看| 成人网在线观看| 精品视频在线播放| 亚洲欧美日韩国产中文专区| 成人亚洲欧美一区二区三区| 国产xxx69麻豆国语对白|