我有一个C ++后端服务器应用程序。当我们的用户登录到应用程序时,会为每个用户创建一个SESSION对象(包含数据库连接,访问权限,指针等的复杂C ++对象)。然后将对象维护在一个数组中。我正在使用批处理脚本在发生崩溃时重新启动应用程序。
问题是,如果应用程序崩溃,SESSIONS数组将被销毁。当应用程序再次启动时,数组为空。因此,用户需要再次登录。
是否有任何方法可以在应用程序重启时保留SESSIONS数组?
我使用的是Qt 5.5框架,操作系统是Ubuntu Linux。
代码:
static QHash<QString,Session*> sessions
class Session {
bool logged_in;
QString aID;
QString sID;
QMap<QString,QMap>;
QMap<QString,QVariant> m_vars;
bool m_database;
int m_minutes;
QTimer* m_sessionTimer;
bool m_valid;
CustomClass* CustomClass;
CustomClass2* CustomClass;
QTimer* timer;
QList <CustomClass3*> objects;
}
CustomClass {
//15 getter-setter functions...
CustomClassInterface interface; //PIMPL
}
CustomClassInterface {
DatabaseClass database;
CustomUserClass userClass;
//...More 5-6 QList items
}
CustomClass2 {
//15 getter-setter functions...
CustomClass2Interface interface; //PIMPL
}
CustomClass2Interface {
DatabaseClass database;
CustomUserClass userClass;
//...More 5-6 QList items
}
...
The class is huge so I can't write the whole code here
向所有类添加序列化将需要重写一堆库。所以,没有实现序列化,没有任何其他方法。像mmap或其他东西。
答案 0 :(得分:2)
提示:关注点分离 您可以使用单独的进程来处理/存储凭据。
答案 1 :(得分:2)
创建/更新会话时,您可以将会话保存在数据库/文件中吗?无论何时启动服务器,都要恢复它们。