【问题标题】:Expressjs with connect-mysql-sessionExpressjs 与 connect-mysql-session
【发布时间】:2011-12-08 15:25:02
【问题描述】:

我正在使用带有 expressjs 的 connect-mysql-session 模块。对于对服务器的 每个 请求,我得到以下信息:

Express server listening on port 3000 in development mode
Executing: CREATE TABLE IF NOT EXISTS `Sessions` (`sid` VARCHAR(255), `expires` INT, `json` TEXT, `id` INT NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
MySQL session store initialized.
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312946989,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.013Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312947060,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.061Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312947088,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.089Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312947089,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.090Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312947114,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.115Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: SELECT * FROM `Sessions` WHERE `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo' LIMIT 1;
Executing: UPDATE `Sessions` SET `sid`='4SQXzLCo1O44CLMdrA1WjVVC.lecbAd5SOXHkyJfR+YEpIVJ8p9E8m79TAGGTwxnoCuo',`expires`=1323327347,`json`='{\"lastAccess\":1323312947253,\"cookie\":{\"originalMaxAge\":14400000,\"expires\":\"2011-12-08T06:55:47.254Z\",\"httpOnly\":true,\"path\":\"/\"},\"status\":true,\"_csrf\":\"kzvoTUf88Nr36YR2g7w6Y9P8\"}',`id`=9,`createdAt`='2011-12-08 03:52:11',`updatedAt`='2011-12-08 03:55:47' WHERE `id`=9

为什么要这样做?

我也为每个请求设置了大约 8 个 cookie (connect.sid),我认为它是为每个资产设置的,如 js、css 和图像。为什么要设置这么多次?应该是吧?

这是我的配置:

app.set('views', __dirname + '/../views');
app.set('view engine', 'html');
app.register('.html', require('ejs'));
app.use(express.bodyParser());
app.use(expressValidator);
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
store: new MySQLSessionStore("test_db", "root", "root"), 
    secret: 'cat'
}));
app.use(app.router);
app.use(express.csrf());
app.use(express.static(__dirname + '/../public'));

问候

【问题讨论】:

    标签: javascript node.js express nowjs-sockets


    【解决方案1】:

    我对此不是 100% 确定,但我认为您应该将静态中间件放在首位。关键是要有上面的静态中间件,因为它不需要会话、cookie 和其他中间件,如下所示:

    app.set('views', __dirname + '/../views');
    app.set('view engine', 'html');
    app.register('.html', require('ejs'));
    app.use(express.static(__dirname + '/../public'));
    app.use(express.bodyParser());
    app.use(expressValidator);
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({
    store: new MySQLSessionStore("test_db", "root", "root"), 
        secret: 'cat'
    }));
    app.use(app.router);
    app.use(express.csrf());
    

    【讨论】:

    • 确实是问题所在。现在它只执行了两次,必须找出它在哪里执行。它也解决了 cookie 的问题 :) 我必须多读一些东西 :/ 感谢您的回复 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2012-01-18
    • 2021-06-13
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多