CORS 与 php 会话

Posted

技术标签:

【中文标题】CORS 与 php 会话【英文标题】:CORS with php session 【发布时间】:2014-10-22 11:15:58 【问题描述】:

我正在网站上使用 CORS。

代码示例:

header("Access-Control-Allow-Origin: *");
session_start();
$session_id = session_id();

这段代码运行良好,但每次都会返回一个新的会话 ID。

在这种情况下如何维护会话数据?

【问题讨论】:

【参考方案1】:

虽然您允许使用 Access-Control-Allow-Origin 标头从外部域进行访问,但会话本身是基于 cookie 的。

如果发出请求的脚本是从外部域传递的,它将无法读取 cookie 并将其传递给您的服务器。

解决方案:交付从与 AJAX 服务相同的上下文(即相同的协议/域/端口)进行调用的 JS。还要确保 cookie 本身不限于不同的子域或路径。

不要尝试通过 POST 或 GET 请求传递会话标识符,这将使您的应用程序容易受到 CSRF 的攻击。

顺便说一句,将允许的来源设置为* 也是不鼓励的,因为它也可以用于 XSS/CSRF,与其他技术结合使用。请限制对第三方域的请求。

最后但同样重要的是,您可能还想通过 HTTP OPTIONS 查看预检请求的主题。

【讨论】:

有没有办法告诉客户端和服务器允许他们一起工作,而是将它们设置在同一个域上? @helle 他们可以一起工作,但不能共享 cookie。 Cookie 始终绑定到域。但是,您可以例如使用令牌并将其作为标头发送以模拟 cookie。但请注意不要遇到 XSS 或 CSRF 等安全问题。

以上是关于CORS 与 php 会话的主要内容,如果未能解决你的问题,请参考以下文章

获取和会话和 CORS

nodejs 中的会话处理。 CORS 问题

Express + Passport + CORS:允许多个域的会话

使用 Vue Axios (CORS) 发送/存储会话 cookie 时出现问题

为啥我的 CORS 应用程序无法识别我的会话?

Laravel 会话与原生 PHP 会话性能差异