2011-12-11 58 views
1

我正在研究當前使用Session來保存用戶標識和權限的Web應用程序。這對我造成了一個問題,因爲客戶端IP地址每5分鐘更換一次,有時會更快,因此會話丟失。如何使用每5分鐘更換一次客戶端IP的會話?

我目前的工作是加密一個字符串,當會話死亡時會自動登錄,但它仍然會導致問題,因爲如果自動登錄進程必須運行,表單將不會被提交。

我可以發佈一些代碼,但我覺得我的方式與我目前的攻擊方式有關。我可以請一些建議嗎?

謝謝!

這個webapp適用於大約10個用戶,如果可能的話,我希望它永不超時,這樣如果他們正在查看一個頁面4天並返回到它,他們可以按提交併提交。

+0

客戶端IP地址更改*不應影響會話,如果您使用的是內置支持 - 會話標識符保存在cookie或url中,且不會綁定到客戶端IP地址。那麼你在做什麼,以這種方式來捆綁它? –

+0

簡單的形式就是這個會話(「用戶」)=「數據」,當IP更改時似乎丟失了 – Landmine

+0

如果您使用InProc會話狀態和*應用程序池*回收,但這是一個服務器端問題(而且,如果每5分鐘發生一次,就要擔心了)。默認的會話超時是20分鐘。 –

回答

1

我不確定爲什麼你會在5分鐘後丟失會話,或者爲什麼它看起來與客戶端IP地址更改相關(這是一個Intranet應用程序嗎?是否有其他事情發生在5分鐘的間隔?)。

以下web.configsetting應創造持續6個月的會議,將生存的應用程序池回收:

<sessionState mode="StateServer" timeout="262800" 
    stateConnectionString="tcpip=127.0.0.1:42424"/> 

當然,你必須有狀態服務器計算機上運行,​​並且一切存儲在會話中將需要可序列化。


由於賈勒特指出,這是相當奇怪,要保持連接存活這麼長時間沒有活動,我不會推薦它,如果有將是用戶的顯著數量,但如果它真的是10個,只有10個用戶,可能沒關係。

+0

當更改web.config時,我得到的所有內容都是「無法序列化會話狀態」。 – Landmine

+0

對,所以實際上在會話中存儲更復雜的數據,而不僅僅是作爲示例給出的字符串,出於某種原因,應用程序池正在非常頻繁地進行回收 - 這是潛在的問題。默認情況下,應用程序池應每29小時回收一次。 –

1

如果您需要頁面保持有效期爲四天,請勿使用Session並且不要使用Viewstate。您可以將數據存儲在Cookie中,隱藏輸入字段中的頁面和URL查詢字符串中。在這段時間內沒有其他任何東西可靠。如果您存儲敏感或安全相關的信息,請採取負責任的態度,這可能是它自己的問題。