我将我的 javascript 客户端迁移到另一个域,现在对 php api 的跨站点调用不共享相同的 php 会话

问题描述 投票:0回答:1

有一段时间我不得不结束:

  • https://client.a.com
    => 一个 JavaScript 客户端 (nuxt)
  • https:/api.a.com
    => PHP api(瘦框架)

为了使这些一起工作,我需要一个共享的 Php 会话。为此,我设置了这样的一切:

  • 来自客户端的调用(使用
    axios
    )配置为
    withCredentials = true
  • 来自 api 的响应标头配置如下:
Access-Control-Allow-Origin: https://client.a.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization
Access-Control-Allow-Methods: POST, GET, OPTIONS

效果很好。

现在,我想将客户端从

https://client.a.com
移至
https://b.com

所以我没有更改客户端中的任何内容,但我将 api 标头响应更改为

Access-Control-Allow-Origin: https://b.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization
Access-Control-Allow-Methods: POST, GET, OPTIONS

而且根本不起作用。 每次我从客户端向 api 发送新请求时,这都是一个新的 PHP 会话。

如果有的话,你知道有什么窍门吗? 干杯<3

javascript php cors header cross-domain
1个回答
1
投票

会话 cookie 可以通过正确的配置在子域之间共享 - 大概这就是到目前为止所发生的情况。但您无法在完全不同的根域之间共享会话。

如果您想将前端移动到新域,例如

b.com
,在不重新设计软件的情况下,一个简单的解决方案是将后端移动到
b.com
的子域,例如
api.b.com


附注长期来看:理想情况下,如果您正在设计一个具有完全独立的客户端前端和 API 后端的应用程序,那么它应该以更加无状态的方式构建,这样它就不需要首先使用会话。

© www.soinside.com 2019 - 2024. All rights reserved.