【发布时间】:2020-01-19 03:38:05
【问题描述】:
我使用的应用程序已经拥有自己的基础架构。任务是集成 session-cookie 机制。我花了很多时间来理解为什么 cookie 没有在客户端设置。
我。简要说明。
应用设置:
服务器:NodeJS 端口:8081
客户端:VueJS 端口:8088
我使用模块“express-session”在服务器端初始化会话机制并将 cookie 发送到客户端。客户端没有设置cookies。
二。详情:
服务器的根文件是index.js。
我在里面做了以下事情:
插入express模块:
const express = require('express')
- 插入
cors模块:
const cors = require('cors')
- 添加
cors设置:
app.use(cors({
origin: 'http://localhost:8088',
credentials: true
}))
然后我在 user.js 文件中初始化会话并接收客户端的连接:
插入express-session模块:
const session = require('express-session')
- 通过 express.Router() 插入路由:
const router = express.Router()
- 添加会话设置:
const EIGHT_HOURS = 1000 * 60 * 60 * 2
const {
SESS_NAME = 'sid',
SESS_LIFETIME = EIGHT_HOURS,
SESS_SECRET = 'test',
NODE_ENV = 'development'
} = process.env
const IN_PROD = NODE_ENV === 'production'
- 初始化会话:
router.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
cookie: {
maxAge: SESS_LIFETIME,
sameSite: false,
// Must have HTTPS to work 'secret:true'
secure: IN_PROD
}
}))
- 通过
router.post()接收客户端查询
App 客户端由很多文件组成。客户端通过 Axios 模块向 NodeJS 服务器发送数据。
我读了几篇关于这个主题的文章,我猜我所做的服务器端设置足以用于工作 session-cookie 机制。这意味着,这个问题在 Vue 方面。
我做了什么:
我在所有文件中设置,其中axios向服务器发送数据,参数withCredentials为真值(withCredentials: true)通过CORS限制。这没有帮助
生产中的应用程序有其他 URL 用于访问生产 NodeJS 服务器。我在所有客户端文件中设置了开发 NodeJS 服务器 URL。这没有帮助
阅读这篇文章:Vue forum。从这篇文章中我了解到,需要通过 axios.interceptors (StackOverFlow forum) 来解决这个问题。我想如果这个设置设置在客户端的一个页面上,可能是 cookie 至少应该在这个页面上工作。这没有帮助。 尝试设置这样的设置:
axios.defaults.withCredentials = true
还有:
axios.interceptors.request.use( function (config) {
console.log('Main interceptor success')
config.withCredentials = true;
return config;
},
function(error) {
// Do something with request error
console.log('Main interceptor error')
return Promise.reject(error);
}
)
这没有帮助
请告诉我我应该朝哪个方向移动?对吗,在客户端上的所有页面都必须是axios.defaults.withCredentials = true 设置来初始化cookie 机制?我错过了什么细节?如果我从头开始设置会话 cookie,该机制就可以工作。
【问题讨论】:
-
您如何确定未设置 cookie?您是否检查了“网络”选项卡中的请求,以确定每种方式发送的确切内容并确认它是正确的?
-
是的,当然,我在 Chrome 中检查网络选项卡。没有关于服务器会话或 cookie 的信息,但会话正在服务器上运行。我正在 Chrome 开发工具的应用程序选项卡中寻找任何 cookie 数据。没有信息。
-
Gleb 你在这个问题上有什么进展吗?我有完全相同的错误
-
@Tichel,是的,我解决了这个问题。我需要在另一个浏览器的地方寻找cookie存储:Chrome server cookie storage上图中的Chrome设置是俄文的,英文需要选择Cookie设置。
标签: node.js vue.js express-session