drogonframework / drogon

Drogon: A C++14/17/20 based HTTP web application framework running on Linux/macOS/Unix/Windows
MIT License
11.06k stars 1.06k forks source link

提供删除Session的方法 #1958

Closed Victor-G1 closed 3 months ago

Victor-G1 commented 4 months ago

我想做一个单地登录,当一个账号登录后,创建session来存储登录信息。 当该账号在另一个地方登录后,通过删除上一个登录的session信息来达到强制退出目的。

目前好像没有提供相应的删除接口?如何实现相关操作 我在registerSessionStartAdvice记录sessionId,但是如何删除呢

an-tao commented 4 months ago

不用删除,修改旧session的状态就可以;

Victor-G1 commented 4 months ago

不用删除,修改旧session的状态就可以;

好像理解有偏差,我是想删除其他登录用户的session。

我的理解req->session()只提供了,删除或修改自己,并没有获取所有用户的Session,并修改其中一个的能力 或者说没有办法根据sessionId来获取该id的session,并操作。

//修改当前登录用户token
 req->session()->modify<std::string>(
        kToken,
    [token](std::string & name) { name = token; });

//删除当前登录用户token
req->session()->erase(kToken);

我只看到SessionManager提供了存储所有用户Session的管理,但是app()HttpAppFramework无法合理调用

an-tao commented 4 months ago

session和活跃浏览器对应,用户的登录状态应该放到session里的某项属性里,而不是通过删除session表示踢掉用户,具体到你说的单点登录的例子,你自己维护一个从userID到session的map即可。

Victor-G1 commented 4 months ago

session和活跃浏览器对应,用户的登录状态应该放到session里的某项属性里,而不是通过删除session表示踢掉用户,具体到你说的单点登录的例子,你自己维护一个从userID到session的map即可。

好的,谢谢。我试试看 另外问下,app是如何管理过期session的,固定时间间隔清理?能不能指引下,实现的文件,我学习下

an-tao commented 4 months ago

有个时间轮子的数据结构,会把超过空闲时限的session移除掉。