node.js 中 session(基于mongodb和express, 并且前后端代码分离,通过http请求连接) 问题

前言

此项目基于前后端分离, express, mongoose, http通讯, session存储在mongodb中 下文有源码,
mongodb连接良好

问题

session存储在mongodb中,并且前后端代码分离, 造成 cookie 中的 connect.sidexpress-session中默认cookie的name是:connect.sid 每次请求都发生变化可能我对cookie的了解不深, 没真正弄懂吧, 这样造成我在登录完成后 login.js , 设置了了 req.session.current_user = ly,并且在当前请求中 console.dirreq.session 是可以打印出 current_user, 但是当我发起另外一个请求 article.js 时, 发现 console.dirreq.session 中压根就 不存在 current_user

初步怀疑是 cookie 的域设置的问题即是在不在当前域名下有效, 我前端的域名为 http://localhost:8080/loginhttp://localhost:8080/article/lists, 后端的域名为 http://localhost:3000/user/loginhttp://localhost:3000/article/lists

请问我的cookie中的 pathdomain 分别设置为什么才是合法的?暂时代码如下:

文档

app.usesession{ store: new MongoStore{ mongooseConnection: mongoose.connection }, secret: ly, resave: false, saveUninitialized: true, cookie: { path: /, domain: localhost, // secure: false, // maxAge: half_hour secure: false, // expires: false, maxAge: null }
}

源码

app.js入口文件:


import cookieParser from cookie-parser
import session from express-session
const MongoStore = requireconnect-mongosession
import mongoose from mongoose // 支持跨域
app.userequirecors app.usecookieParser app.usesession{ store: new MongoStore{ mongooseConnection: mongoose.connection }, secret: ly, resave: false, // 表示cookie的name,默认cookie的name是:connect.sid // name: connect.sid, saveUninitialized: true, cookie: { // secure: false, // maxAge: half_hour // 新添加的 path: /, domain: localhost, secure: false, expires: false, maxAge: null }
}

login.js:

function login req, res, next { req.session.current_user = ly // 这里可以打印出 current_user: ly console.dirreq.session // 输出: // Session { // cookie: // { path: /, // _expires: null, // originalMaxAge: null, // httpOnly: true, // secure: false }, // current_user: ly }
}

article.js

function lists req, res, next { // 这里 current_user 消失了 console.dirreq.session // 输出: // Session { // cookie: // { path: /, // _expires: null, // originalMaxAge: null, // httpOnly: true, // secure: false } } }

“造成 cookie 中的 connect.sidexpress-session中默认cookie的name是:connect.sid 每次请求都发生变化”的原因很可能是因为cookie丢失或过期了。
在这个情景下过期很可能expires和maxage的设置问题。
可以试试根据https://github.com/expressjs/…去配置cookie的行为。

发表评论

电子邮件地址不会被公开。 必填项已用*标注