從別人那拷下來的幾點(diǎn)Session使用的經(jīng)驗(yàn)
更新時(shí)間:2007年04月13日 00:00:00 作者:
問:當(dāng)頁面中是否了frameset,發(fā)現(xiàn)在每個(gè)frame中顯示頁面的SessionID在第一次請(qǐng)求時(shí)都不相同,為什么?
答:原因是你的frameset是放在一個(gè)htm頁面上而不是ASPX頁面。
在一般情況下,如果frameset是aspx頁面,當(dāng)你請(qǐng)求頁面時(shí),它首先將請(qǐng)求發(fā)送到Web服務(wù)器,此時(shí)已經(jīng)獲得了SessionID,接著瀏覽器會(huì)分別請(qǐng)求Frame中的其他頁面,這樣所有頁面的SessionID就是一樣的,就是FrameSet頁面的SessionID。
然而如果你使用Html頁面做FrameSet頁面,第一個(gè)請(qǐng)求將是HTML頁面,當(dāng)該頁面從服務(wù)器上返回是并沒有任何Session產(chǎn)生,接著瀏覽器會(huì)請(qǐng)求Frame里面的頁面,這樣這些頁面都會(huì)產(chǎn)生自己的SessionID,所以在這種情況下就會(huì)出現(xiàn)這種問題。當(dāng)你重新刷新頁面時(shí),SessionID就會(huì)一樣,并且是最后一個(gè)請(qǐng)求頁面的SessionID。
問:是否可以將不同應(yīng)用程序的Session保存在相同的SQL Server服務(wù)器的不同數(shù)據(jù)庫上。
答:可以,請(qǐng)參考:
FIX: Using one SQL database for all applications for SQL Server session state may cause a bottleneck
http://support.microsoft.com/default.aspx?scid=kb;en-us;836680
問:在Session_End是我是否可以獲得有效的HttpSessionState和HttpContext對(duì)象?
答:你可以在這個(gè)方法中獲得HttpSessionState對(duì)象,可以直接使用Session來訪問即可。但是不能獲得HttpContext對(duì)象,因?yàn)樵撌录]有和任何請(qǐng)求相關(guān)聯(lián),因此不存在上下文對(duì)象。
問:當(dāng)我設(shè)置EnableSessionState為“ReadOnly”后,但是我在InProc模式下依然可以修改Session的值,這是為什么?
答:即使EnableSessionState標(biāo)示為ReadOnly,但是在InProc模式下用戶依然可以編輯Session。唯一不同的是,在請(qǐng)求過程中Session將不會(huì)被鎖住。
問:當(dāng)Session設(shè)置成cookieless后會(huì)有什么影響?
答:當(dāng)把cookieless設(shè)置成true時(shí),主要會(huì)有下面的約束:
1、在頁面中不能使用絕對(duì)鏈接
2、在應(yīng)用程序中在除了Http和Https之間的切換時(shí)需要完成一些其他的步驟。
如果發(fā)送一個(gè)鏈接給其他人,此時(shí)的URL里面將包含Session ID的信息,所以兩個(gè)人將公用一個(gè)Session。
問:為了可以順序訪問Session的狀態(tài)值,Session是否提供了鎖定機(jī)制?
答:Session實(shí)現(xiàn)了Reader/Writer的鎖機(jī)制:
當(dāng)頁面對(duì)Session具有可寫功能(即頁面有<%@ Page EnableSessionState="True" %>標(biāo)記),此時(shí)直到請(qǐng)求完成該頁面的Session持有一個(gè)寫鎖定。
當(dāng)頁面對(duì)Session具有只讀功能(即頁面有<%@ Page EnableSessionState="ReadOnly" %>標(biāo)記),此時(shí)知道請(qǐng)求完成該頁面的Session持有一個(gè)讀鎖定。
讀鎖定將阻塞一個(gè)寫鎖定;讀鎖定不會(huì)阻塞讀鎖定;寫鎖定將阻塞所有的讀寫鎖定。這就是為什么兩個(gè)框架中的同一個(gè)頁面都去寫同一個(gè)Session時(shí),其中一個(gè)要等待另一個(gè)(稍快的那個(gè))完成后,才開始寫。
問:如果使用了cookieless,我該如何從HTTP頁面定向到HTTPS?
答:請(qǐng)嘗試下面的方法:
String originalUrl = "/fxtest3/sub/foo2.aspx";
String modifiedUrl = "https://localhost" + Response.ApplyAppPathModifier(originalUrl);
Response.Redirect(modifiedUrl);
問:什么類型的對(duì)象可以保存在Session里?
答:這依賴使用的Session的模式,當(dāng)使用的是進(jìn)程內(nèi)(InProc)的Session那么可以輕松的保存任何對(duì)象。如果你使用了非InProc的模式,則只能保存可以序列化和反序列化的對(duì)象,如果此時(shí)保存的對(duì)象不支持序列化,則不能保存到這種模式(非InProc)的Session里。
問:為什么每次請(qǐng)求的SessionID都不相同?
答:該問題可能是沒有在Session里面保存任何信息引起的,即程序中任何地方都沒有使用Session。當(dāng)Session中保存信息之后SessionID將一直和瀏覽器相關(guān),此時(shí)的SessionID將不會(huì)在變化。
答:原因是你的frameset是放在一個(gè)htm頁面上而不是ASPX頁面。
在一般情況下,如果frameset是aspx頁面,當(dāng)你請(qǐng)求頁面時(shí),它首先將請(qǐng)求發(fā)送到Web服務(wù)器,此時(shí)已經(jīng)獲得了SessionID,接著瀏覽器會(huì)分別請(qǐng)求Frame中的其他頁面,這樣所有頁面的SessionID就是一樣的,就是FrameSet頁面的SessionID。
然而如果你使用Html頁面做FrameSet頁面,第一個(gè)請(qǐng)求將是HTML頁面,當(dāng)該頁面從服務(wù)器上返回是并沒有任何Session產(chǎn)生,接著瀏覽器會(huì)請(qǐng)求Frame里面的頁面,這樣這些頁面都會(huì)產(chǎn)生自己的SessionID,所以在這種情況下就會(huì)出現(xiàn)這種問題。當(dāng)你重新刷新頁面時(shí),SessionID就會(huì)一樣,并且是最后一個(gè)請(qǐng)求頁面的SessionID。
問:是否可以將不同應(yīng)用程序的Session保存在相同的SQL Server服務(wù)器的不同數(shù)據(jù)庫上。
答:可以,請(qǐng)參考:
FIX: Using one SQL database for all applications for SQL Server session state may cause a bottleneck
http://support.microsoft.com/default.aspx?scid=kb;en-us;836680
問:在Session_End是我是否可以獲得有效的HttpSessionState和HttpContext對(duì)象?
答:你可以在這個(gè)方法中獲得HttpSessionState對(duì)象,可以直接使用Session來訪問即可。但是不能獲得HttpContext對(duì)象,因?yàn)樵撌录]有和任何請(qǐng)求相關(guān)聯(lián),因此不存在上下文對(duì)象。
問:當(dāng)我設(shè)置EnableSessionState為“ReadOnly”后,但是我在InProc模式下依然可以修改Session的值,這是為什么?
答:即使EnableSessionState標(biāo)示為ReadOnly,但是在InProc模式下用戶依然可以編輯Session。唯一不同的是,在請(qǐng)求過程中Session將不會(huì)被鎖住。
問:當(dāng)Session設(shè)置成cookieless后會(huì)有什么影響?
答:當(dāng)把cookieless設(shè)置成true時(shí),主要會(huì)有下面的約束:
1、在頁面中不能使用絕對(duì)鏈接
2、在應(yīng)用程序中在除了Http和Https之間的切換時(shí)需要完成一些其他的步驟。
如果發(fā)送一個(gè)鏈接給其他人,此時(shí)的URL里面將包含Session ID的信息,所以兩個(gè)人將公用一個(gè)Session。
問:為了可以順序訪問Session的狀態(tài)值,Session是否提供了鎖定機(jī)制?
答:Session實(shí)現(xiàn)了Reader/Writer的鎖機(jī)制:
當(dāng)頁面對(duì)Session具有可寫功能(即頁面有<%@ Page EnableSessionState="True" %>標(biāo)記),此時(shí)直到請(qǐng)求完成該頁面的Session持有一個(gè)寫鎖定。
當(dāng)頁面對(duì)Session具有只讀功能(即頁面有<%@ Page EnableSessionState="ReadOnly" %>標(biāo)記),此時(shí)知道請(qǐng)求完成該頁面的Session持有一個(gè)讀鎖定。
讀鎖定將阻塞一個(gè)寫鎖定;讀鎖定不會(huì)阻塞讀鎖定;寫鎖定將阻塞所有的讀寫鎖定。這就是為什么兩個(gè)框架中的同一個(gè)頁面都去寫同一個(gè)Session時(shí),其中一個(gè)要等待另一個(gè)(稍快的那個(gè))完成后,才開始寫。
問:如果使用了cookieless,我該如何從HTTP頁面定向到HTTPS?
答:請(qǐng)嘗試下面的方法:
String originalUrl = "/fxtest3/sub/foo2.aspx";
String modifiedUrl = "https://localhost" + Response.ApplyAppPathModifier(originalUrl);
Response.Redirect(modifiedUrl);
問:什么類型的對(duì)象可以保存在Session里?
答:這依賴使用的Session的模式,當(dāng)使用的是進(jìn)程內(nèi)(InProc)的Session那么可以輕松的保存任何對(duì)象。如果你使用了非InProc的模式,則只能保存可以序列化和反序列化的對(duì)象,如果此時(shí)保存的對(duì)象不支持序列化,則不能保存到這種模式(非InProc)的Session里。
問:為什么每次請(qǐng)求的SessionID都不相同?
答:該問題可能是沒有在Session里面保存任何信息引起的,即程序中任何地方都沒有使用Session。當(dāng)Session中保存信息之后SessionID將一直和瀏覽器相關(guān),此時(shí)的SessionID將不會(huì)在變化。
相關(guān)文章
asp.net 通用的連接數(shù)據(jù)庫實(shí)例代碼
數(shù)據(jù)庫連接是所有程序開發(fā)是會(huì)用到的,只是不同程序與數(shù)據(jù)庫連接的方法不一樣,下面我來介紹asp.net中數(shù)據(jù)庫連接代碼,有需要的朋友可以參考一下2013-08-08IIS上部署你的ASP.NET?Core?Web?Api項(xiàng)目及Swagger(圖文)
本篇經(jīng)驗(yàn)將和大家介紹如何在IIS上部署ASP.NET?Core項(xiàng)目,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,希望為初學(xué).NET?CORE的童靴入門有所幫助2023-09-09創(chuàng)建基于ASP.NET的SMTP郵件服務(wù)的具體方法
Asp.net在System.Web.Mail名稱空間中有一個(gè)發(fā)送email的內(nèi)建類,但這僅是cdosys的一個(gè)假象。開發(fā)者能使用一個(gè)替代的它smtp郵件服務(wù)。在這篇文章里面,我將會(huì)展示如何創(chuàng)建一個(gè)用于asp.net的功能齊全的smtp郵件服務(wù)2013-11-11在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫
這篇文章主要介紹了在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02獲取轉(zhuǎn)向地址的URL的源文件(可自定義REFER)
獲取轉(zhuǎn)向地址的URL的源文件(可自定義REFER)...2006-09-09.NET?SkiaSharp?生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)
這篇文章主要為大家介紹了.NET?SkiaSharp?生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10GridView自動(dòng)增加序號(hào)(三種實(shí)現(xiàn)方式)
第一種方式,直接在Aspx頁面GridView模板列中.這種的缺點(diǎn)是到第二頁分頁時(shí)又重新開始了,第二種方式分頁時(shí)進(jìn)行了計(jì)算,這樣會(huì)累計(jì)向下加,點(diǎn)三種放在cs代碼中2013-04-04