2013-05-30 80 views
0

我正在處理一箇舊的ASP.NET應用程序,它有很多糟糕的代碼。ASP.NET使用會話ID

我一直是一個winform開發者,我對webforms的瞭解還很有限。

但是,看開發人員試圖將信息傳遞給其他頁面的方式對我來說聽起來無效。

這是他通過從一個網頁到其他網頁信息的典型方式:

Response.Redirect("ABC.aspx?SessionID=08F7DCF3D6984EC984F6580A4EC7E9C2&CID=" _ 
        & e.Item.Cells(iColClientID).Text & "", True) 

然後在其他頁面上,他使用的Request.QueryString來取回數據:

Request.QueryString 

我的問題這就是爲什麼在這個世界上他還需要在查詢字符串中傳遞一個硬編碼的SessionID=08F7DCF3D6984EC984F6580A4EC7E9C2

Web.config文件顯示:

<sessionState mode="InProc" cookieless="false" timeout="30"/> 

因此,如果會話使用cookie發送爲什麼會話ID?

對我來說,代碼是由一個成熟的開發人員編寫的。請提供您的反饋。

+0

什麼'SessionID'實際上在ABC.aspx? –

+0

從查詢字符串中讀取後,您是否注意到了他在使用SessionID所做的工作? – ssilas777

回答

1

除非他爲其他東西使用SessionID參數 - 其中一些其他隱藏的邏輯依賴它存在於QueryString-中,所以根本沒有理由在查詢字符串中放置SessionID。有或沒有啓用Cookie如何獲得SessionID應該是透明的,你和它足以做到:

var sessionID = Session.SessionID; 

從MSDN關於Cookie會話(這不是這裏的情況根據Web一些相關文檔。配置你顯示):

ASP.NET通過在頁面的URL中自動插入一個唯一的會話ID來保持無Cookie會話狀態。例如,下面的 URL已被ASP.NET修改,以包含唯一的會話ID lit3py55t21z5v55vlm25s55: http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx 當ASP.NET發送一個網頁瀏覽器,它會修改 頁面使用應用程序 - 所有鏈接通過在鏈接中嵌入會話ID 值來確定相對路徑。 (絕對路徑的鏈接未被修改。) 只要用戶點擊鏈接,就可以保持會話狀態,而鏈接的修改方式爲 。但是,如果客戶端重寫由應用程序提供的URL ,則ASP.NET可能無法解析會話ID並將該請求與現有的 會話關聯。在這種情況下,將爲請求啓動一個新的會話。

+0

很好。由於我們可以使用var sessionID = Session.SessionID輕鬆訪問sessionID對象; 那麼將硬編碼號碼作爲會話ID發送給Response有什麼意義。重定向 –

+0

我的意思是,因爲會話ID是自動生成的,所以在第二種形式中,如果我們想從會話中獲取數據,我們是否需要使用Request.QueryString方法?第一頁中的所有信息都可以存儲在會話對象中。我很感激你能否用這種方法來解釋任何缺點。 –

+0

@SNash否,不需要在相同的應用程序中將SessionID放入QuetyString中。有些人使用像這樣的技術(將SessionID附加到查詢字符串)將控制轉移到使用此SessionID來驗證某些內容的不同應用程序。再一次,這似乎不是你的情況。 – Icarus