39 lines
1.2 KiB
C++
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__
|