将 PHP 会话与 Vue/Node.js 集成

Posted

技术标签:

【中文标题】将 PHP 会话与 Vue/Node.js 集成【英文标题】:Integrate PHP sessions with Vue/Node.js 【发布时间】:2018-08-11 22:32:08 【问题描述】:

我有一个 php 应用程序,它对用户进行身份验证、执行 mysql 查询并依赖于 $_SESSION cookie。

一切正常,但我意识到我需要在前端做更多事情,因此不得不使用 Vue.js 和 websockets。

因此,我将 node.js 用于主域 localhost(为了生产)

我在 localhost:8080 上提供了 PHP API,以便 Vue.js 可以与 PHP 后端通信。

现在,这是我的问题

如何在 Vue/Websocket 中使用/存储 $_SESSION ID 并将其与对 PHP 服务器的每个请求一起发送?

我对 *** 做了一些研究,发现 session_id() 可以返回当前的 Session ID,但我不知道如何将 PHP 与 Vue 集成。

注意:我正在使用 Vue.js(Vue、路由器、Vuex)和带有 Node.js 的 socket.io

【问题讨论】:

你在做某事。错误的。为什么需要 nodeJS? 我正在使用一些不能用于 ES5 的前端库。我已经解释过我需要在前端做更多的事情,我正在使用 Vue、Vue 路由器和 Vuex。这些只是 3 个核心库。我总共有超过 19 个库(不包括开发依赖项)。我无法想象在 unpkg.com 上使用它会产生大量的 http 请求,从而增加加载时间。我也打算集成websockets。 开发依赖和依赖是有区别的。只需创建一个脚本,将最终产品编译到 PHP 公共文件夹中。 问问自己为什么要使用每种技术。我相信您使用 php 作为后端,最终将为您的前端文件提供服务。如果您希望在 nodeJS 中实现您的 websocket,您可以通过简单地指定 websocket 服务器正在运行的端口来进行跨域(端口)连接。您可能需要编辑您的问题,以便更清楚地了解您通过结合两种后端技术想要实现的目标。 @itsundefined 已更新。感谢您的建议。我确实意识到这个问题之前还不够清楚。 【参考方案1】:

由于 PHP 服务器和 node.JS 服务器运行在两个不同的端口上,因此在所有浏览器中它们被视为不同的来源。这意味着从localhost:8080 发送的cookie 将不会发送到对localhost:80 的任何请求。解决此问题的一种方法是删除会话 cookie 上的 http only 标志,以便您可以通过 javascript BUT 手动发送 cookie,如果有人管理,这可能会非常糟糕在您的网站上运行 XSS 攻击。

其他方法是 1) 仅使用前端的两台服务器中的一台,然后让使用过的后端与另一个后端通信,这意味着您可以使 php 仅可用于节点应用程序或 2) 重新设计 PHP 以使用令牌。据我了解,您使用 php 作为 API,并且大多数 API 旨在使用令牌而不是会话,因为您通常从另一个域访问 API。

【讨论】:

我现在想知道 Node 是如何与客户端通信的?并访问 cookie 数据(如果有)。 嗯,我在考虑使用 JWT 来获取令牌。你能指导我吗? 网上有很多教程,但是如果你不写PHP代码就很难实现。

以上是关于将 PHP 会话与 Vue/Node.js 集成的主要内容,如果未能解决你的问题,请参考以下文章

在不启动 PHP 会话的情况下检查?

如何在同一台服务器上跨多个域维护 PHP 会话?

将经典 ASP 与 ASP.NET 集成

与 PHP 共享 Laravel 身份验证/会话

Bref PHP 将会话存储在 redis 中但无法读取

vue——node.js安装