首先,這不是一個關於的問題如何獲取用戶的IP地址,因爲我知道該怎麼做。關於保持用戶「最後的IP地址」的建議
基本上,我的網站(ASP.NET MVC 3 Web應用程序)的管理員需要能夠阻止某個IP地址提交用戶內容。所以我在我們的系統中存儲了針對用戶的「IP地址」。涼。
我的問題是:
時(例如在什麼時間,頁面生命週期事件),我應該檢查用戶當前的IP地址,並保存到數據庫中?
此刻,我正在考慮使用會話。也就是說,當我第一次創建會話時(例如Session_OnStart()
),請抓住用戶的IP地址並將其保存在會話中。然後,當會話結束時(例如Session_OnEnd()
),我看到會話中的IP地址是否與數據庫的IP地址不同。如果是,更新數據庫。
在我們使用是InProc時刻,但有一個很好的機會,我們會去的StateServer以後 - 和MSDN指出的Session_OnEnd只適用於是InProc。所以這可能是一個問題。
這種方法的任何想法/替代方案?
編輯
所以我試圖用Session_OnStart()
嘗試做以下事情:
如果用戶通過認證,獲得他們的IP地址,從數據庫中獲取他們的最後一個IP,如果他們不同,更新數據庫。
但問題似乎是:Session_OnStart
運行以前Application_AuthenticateRequest
- 所以它從來沒有經過「被認證」檢查。
一個很好的例子是,如果用戶登錄到我的網站 - 使用Forms Auth,它設置一個有效期限爲一週的cookie(例如)。
然後幾天後他們回來了 - Session_OnStart
被解僱 - 但他們還沒有通過身份驗證。即使cookie存在 - 它尚未處理到http上下文中。
因此,Session_OnStart看起來像一個沒有去 - 任何其他的想法?
我不明白你爲什麼需要將IP地址存儲到數據庫中。 – 2011-05-06 10:11:49
@Carl R - 因爲管理員可能會看到一個特定的IP地址在我的網站上發送了垃圾內容,並且他們創建了不同的用戶。所以這樣,我可以通過IP地址禁用所有帖子 - 例如'UPDATE Posts SET Disabled = 1 WHERE IpAddress = Blah' – RPM1984 2011-05-06 23:40:01