NodeJS、VueJS、快速会话。 cookie 不在客户端设置

Posted

技术标签:

【中文标题】NodeJS、VueJS、快速会话。 cookie 不在客户端设置【英文标题】:NodeJS, VueJS, express-session. Cookies don't set on client side 【发布时间】: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 (*** 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设置。 【参考方案1】:

我解决了这个问题。我需要在另一个浏览器位置寻找 cookie 存储:

Chrome server cookie storage

【讨论】:

以上是关于NodeJS、VueJS、快速会话。 cookie 不在客户端设置的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS + Google Login + Firebase Functions 导致解码 Firebase 会话 cookie 失败

在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久

在nodejs中删除浏览器关闭时的会话

Laravel与Socket.io Nodejs共享会话

快速会话和 Cookie

每个请求使用不同的 cookie 域进行快速会话?