Beispiel #1
0
	SessionPtr Application::getSession(Request& request, const std::string& sessionId)
	{
		Synchronize on (*this);

		cleanSessionCache();

		SessionPtr out;
		Sessions::iterator _it = m_sessions.find(sessionId);
		if (_it == m_sessions.end() || !_it->second.second.get())
		{
			db::ConnectionPtr db = request.dbConn();
			if (db.get())
				out = Session::fromDB(db, m_userInfoFactory, sessionId.c_str());

			// TODO: limits needed, or DoS eminent
			if (out.get())
				m_sessions.insert(std::make_pair(sessionId, std::make_pair(tyme::now(), out)));
		}
		else
		{
			out = _it->second.second;
			_it->second.first = tyme::now(); // ping the session
		}

		return out;
	}
Beispiel #2
0
	SessionPtr Application::startSession(Request& request, const char* login)
	{
		Synchronize on (*this);

		cleanSessionCache();

		SessionPtr out;
		db::ConnectionPtr db = request.dbConn();
		if (db.get())
			out = Session::startSession(db, m_userInfoFactory, login);
		// TODO: limits needed, or DoS eminent
		if (out.get())
			m_sessions.insert(std::make_pair(out->getSessionId(), std::make_pair(out->getStartTime(), out)));

		return out;
	}