diff --git a/WebModules.cpp b/WebModules.cpp index a66530dc..19332565 100644 --- a/WebModules.cpp +++ b/WebModules.cpp @@ -19,6 +19,8 @@ CWebSessionMap CWebSock::m_mspSessions(24 * 60 * 60 * 1000); static std::multimap mIPSessions; typedef std::multimap::iterator mIPSessionsIterator; +const unsigned int CWebSock::m_uiMaxSessions = 5; + CWebSession::~CWebSession() { // Find our entry in mIPSessions pair p = @@ -689,6 +691,11 @@ CSmartPtr CWebSock::GetSession() { return *pSession; } + if (mIPSessions.count(GetRemoteIP()) > m_uiMaxSessions) { + mIPSessionsIterator it = mIPSessions.find(GetRemoteIP()); + mIPSessions.erase(it); + } + CString sSessionID; do { sSessionID = CString::RandomString(32); diff --git a/WebModules.h b/WebModules.h index 0ecc3394..d115b8a0 100644 --- a/WebModules.h +++ b/WebModules.h @@ -172,6 +172,7 @@ private: CSmartPtr m_spSession; static CWebSessionMap m_mspSessions; + static const unsigned int m_uiMaxSessions; }; #endif // !_WEBMODULES_H