【发布时间】:2021-08-30 18:06:21
【问题描述】:
我在我的应用程序中使用 express-session 和 express-mysql-session 来生成会话并将它们存储在 mysql 数据库中。会话存储在一个名为会话的表中。
const express = require('express');
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
const cookieParser = require('cookie-parser');
const connection = {
host: process.env.MYSQL_HOST,
port: process.env.MYSQL_PORT,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
};
const sessionStore = new MySQLStore(connection);
module.exports = app => {
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(
session({
name: 'sessID',
secret: 'someSecret',
resave: false,
store: sessionStore,
saveUninitialized: true,
})
);
会话存储在表中,但它的值与客户端或控制台中的会话值不同。
示例:客户端和控制台中的解码值为s:fiNdSdb2_K6qUB_j3OAqhGLEXdWpZkK4.eKUawMNIv7ZtXSweWyIEpfAUnfRd6/rPWr+PsjuGCVQ,但存储的值为fiNdSdb2_K6qUB_j3OAqhGLEXdWpZkK4。它不完整,我不知道发生了什么。
显示创建表会话:
sessions CREATE TABLE `sessions` (
`session_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
NOT NULL,
`expires` int unsigned NOT NULL,
`data` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
【问题讨论】:
-
运行
SHOW CREATE TABLE sessions并发布结果into your question -
@FaNo_FN 更新了我的问题
-
对不起,我的无知,这是我第一次看到这个,但似乎我对
SHOW CREATE TABLE sessions的请求实际上是不必要的。我刚刚read the documentation,我可以看到该表是由模块创建的。请问你是怎么知道存储不完整的?您是否通过在 MySQL 工具(例如 MySQL Workbench 或 SQLyog)中运行查询来进行检查? -
@FaNo_FN 没关系。我想验证用户输入,所以我决定将错误存储在数据列中(以防出现错误)。因此,我需要将请求的会话值与数据库中的 session_id 匹配。我运行查询以查看 session_id 并尝试与客户端会话值匹配,但它不一样,我认为它可能是
express-mysql-session。如果它不起作用,我必须使用另一个模块。
标签: javascript mysql node.js express express-session