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 会话的主要内容,如果未能解决你的问题,请参考以下文章
Express + Passport + CORS:允许多个域的会话