代码之家  ›  专栏  ›  技术社区  ›  stadja

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

  •  0
  • stadja  · 技术社区  · 6 月前

    一段时间以来,我不得不结束:

    • https://client.a.com =>javascript客户端(nuxt)
    • https:/api.a.com =>PHP api(精简框架)

    为了使这些工作得以实现,我需要一个共享的博士课程。为此,我把一切都安排成这样:

    • 从客户端调用(使用 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.

    1 回复  |  直到 6 月前
        1
  •  1
  •   ADyson    6 月前

    会话Cookie可以在子域名之间共享,配置正确——大概这就是到目前为止发生的事情。但是,您不能在完全不同的根域之间共享会话。

    如果您想将前端移动到新域,例如。 b.com ,如果不重新设计软件,一个简单的解决方案是将后端移动到 b.com 例如。 api.b.com .


    P.S.长期:理想情况下,如果你设计的应用程序有一个完全独立的客户端前端和一个API后端,它应该以一种更无状态的方式构建,这样它一开始就不需要使用会话。