Older/SessionStore.h
2025-03-01 09:09:30 +00:00

39 lines
1.2 KiB
C++

#ifndef __SESSIONSTORE_H__
#define __SESSIONSTORE_H__
#include <boost/asio/io_context.hpp>
#include <boost/asio/steady_timer.hpp>
#include <shared_mutex>
namespace Older {
struct SessionData {
int userId;
std::string refreshToken;
std::chrono::system_clock::time_point expireTime;
std::chrono::system_clock::time_point refreshTime;
};
class SessionStore {
public:
SessionStore(boost::asio::io_context &ioContext);
std::string addSession(int userId, std::chrono::minutes sessionLifetime = std::chrono::minutes{1440}, // 24小时
std::chrono::minutes refreshInterval = std::chrono::minutes{15});
void removeSession(const std::string &token);
std::pair<bool, std::string> validateAndRefresh(const std::string &token);
SessionData at(const std::string &token);
protected:
void startCleanupTask();
void cleanupExpiredSessions();
private:
boost::asio::io_context &m_ioContext;
boost::asio::steady_timer m_cleanupTimer;
std::shared_mutex m_mutex;
std::unordered_map<std::string, SessionData> m_sessions;
std::unordered_map<std::string, std::string> m_refreshMap;
};
} // namespace Older
#endif // __SESSIONSTORE_H__