Express-session和SQL:我可以使用connect-session-sequelize中的信息来提供登录/



我有一个用express-session和connect-session-sequelize处理用户登录/注销的小项目。它按预期工作,但我现在想跟踪用户在网站上花费的时间。

起初,我认为这只是在用户每次成功登录时向登录/注销表添加一条带有用户详细信息的记录,并在用户注销时更新该记录的问题。这并不像计划的那样工作,因为有时用户只是不注销!他们要么关闭应用程序,要么让它继续运行。在这两种情况下,下一次他们登录时,一个新的记录被添加到表中,我留下了他们以前使用的不完整的记录(即没有注销时间)。

然后我想也许我可以使用connection -session-sequelize创建的Sessions表来为我完成这些信息。我想"如果我在会话表中添加一个触发器,在会话到期之前触发,我就可以更新我的登录/注销表了"。

问题是,要做到这一点,我需要一种方法来使用会话表中会话记录的'data'字段中的信息,这是一个文本字段,其内容看起来像这样:

{
"cookie:
{
"originalMaxAge":600000,
"expires":"2021-03-08T02:02:02.002Z",
"httpOnly":true,
"path":"/"
},
"userOk":
{
"userEmail":"sample@hitmail.com",
"loggedIn":true
}
}

那么,我想我的问题是:

是否有一种方法可以创建一个删除触发器,它能够从会话表中的记录提取用户电子邮件,并使用它来定位和更新我的登录/注销表中的适当记录?

或者,我可以转换会话记录并在会话到期或用户注销时创建登录/注销记录(因为在这两种情况下,记录都将从Sessions表中删除)。

或者其他你们可以建议的,真的。

任何建议我们都将欣然接受。

事实证明,MariaDB具有Regex函数。使用REGEXP_SUBSTR,我可以创建一个"before delete"触发解决了我的问题。

CREATE DEFINER=`root`@`localhost` TRIGGER `updt_usage` BEFORE DELETE ON `eas_sessions` FOR EACH ROW
BEGIN
UPDATE eas_usage SET logout = now() where user_email = REGEXP_SUBSTR(old.data,'([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-Z0-9_-]+)') and logout is null;
END

最新更新