2010-02-09 62 views
0

我在我的開發框(Vista/IIS7上的.NET 2.0)上運行ASP.NET網站。 global.asax.cs中的Session_Start方法記錄每個對文件(log4net)的調用。 Session_End方法還會記錄每個呼叫。ASP.NET:大量具有相同會話ID的Session_Start

我正在使用InProc會話狀態,並將會話超時設置爲5分鐘(以避免等待20分鐘)。

我打了網站,等了5分鐘我看到Session_End日誌單元。然後我F5的網站。瀏覽器仍然有會話cookie並將其發送到服務器。 Session_Start被調用,並使用相同的會話ID創建一個新的會話(順便說一句:我需要這是相同的會話ID,因爲它用於存儲數據在數據庫中)。

結果: 每次我在先前結束的會話上點擊F5時,都會調用Session_Start方法。

當我打開不同的瀏覽器時,Session_Start方法只被調用一次。然後5分鐘後Session_End每個F5都會導致Session_Start方法執行。

任何人都可以解釋爲什麼發生這種情況?

更新: 會話超時後,所有後續請求都會話開始&會話結束。所以最後我的問題是:爲什麼關於這些後續請求的會話立即關閉?

2010-02-09 14:49:08,754 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,754 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET http://localhost:80/js/settings.js 
2010-02-09 14:49:08,756 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,760 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,760 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=core 
2010-02-09 14:49:08,761 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,762 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,762 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /js/package.aspx?name=all 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=rest 
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,765 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=vacation 
2010-02-09 14:49:08,765 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 

web.config中相關章節:

<system.web> 
    <compilation debug="true" /> 
    <sessionState timeout="2" regenerateExpiredSessionId="false" /> 
</system.web> 
+0

這不正是你剛纔所描述的和預期會發生什麼? – Lazarus 2010-02-09 13:22:39

+0

不,我期望在Session_End後只有1個Session_Start,而不是10個Session_Start的當我按F5 10次(或按順序點擊10個鏈接) – Jaap 2010-02-09 13:48:03

+0

在請求被服務後立即調用Session_End方法。 – Jaap 2010-02-09 13:51:08

回答

1

你能不能請你張貼的web.config?

檢查的System.Web中regenerateExpiredSessionId值/的sessionState

+0

我在web.config中沒有regenerateExpiredSessionId。我不想重新生成過期的會話ID,這是一個要求,因爲我們需要會話ID來更新數據庫中的記錄 – Jaap 2010-02-09 15:00:22

+0

也許它會幫助,如果你手動設置爲「false」 – nWorx 2010-02-09 15:23:04

+0

設置值爲false不會工作,仍然得到1請求的Session_Start/Session_End – Jaap 2010-02-09 16:15:38

0

你更改您的Web應用程序的bin文件夾? 就像登錄bin文件夾一樣,這可能會導致會話開始觸發多次。

0

我想你是誤解regenerateExpiredSessionId的意思。您目前已將其設置爲false,這意味着它將重新使用過期的會話ID,而不是在每次該用戶獲得新會話時都生成一個新會話ID。 ASP.NET會話ID保存在用戶cookie中,當regenerateExpiredSessionId設置爲false時,只要cookie有效,那麼用戶相同的會話ID將被重用於它們獲得的每個NEW會話。

嘗試將regenerateExpiredSessionId設置爲true。

相關問題