gpt4 book ai didi

php - 跨域 PHP session

转载 作者:可可西里 更新时间:2023-11-01 13:15:44 26 4
gpt4 key购买 nike

我正在构建一个网站,允许用户在我的网站上指向 CNAME 记录以运行他们的“配置文件”,这允许您自己的域名在我的网站上加载您的配置文件。

这引发了与 session 相关的各种问题。我已经看到 virb 这样做了。我没有在 iFrame 中看到任何基于 session 的信息...但是页面上存在一个 iFrame。

我可以让域的东西工作,我只是丢失了 session 数据......有什么想法吗?

(这里是一个例子——链接到 Virb——http://www.agentspider.com/)

最佳答案

默认不能跨域设置cookies。我相信,您可以设置一个 P3P 文件来启用它。 http://p3ptoolbox.org/guide/section4.shtml#IVd我自己还没有这样做,所以我不知道有多少浏览器实现了它,或者它是否以这种方式工作。

Virb 看起来只是在使用 JavaScript。它有一个 AJAX 库,可以生成 JSON-P如果没有设置 session cookie,则向 virb 服务器请求。 (首次加载 Firefox,您可以在 Firebug 中看到这一点)JSON 响应只是让页面知道用户是否登录,并更新需要反射(reflect)用户状态的页面部分。

所以发生的事情是该页面嵌入了一些来自 virb.com 的 JS。由于域是 virb.com,因此将设置为 virb.com 的 cookie 发送到服务器。然后服务器将 cookie 的结果响应给外部站点。

如果没有 JS,virb 将无法正常工作,我认为这是一个不错的选择。但是,您可以对 HTTP 重定向执行相同的操作。

如果 HTTP 主机不是主域 (example.com):

if (!$_COOKIE['sessionid'] && $_SERVER['HTTP_HOST'] != 'example.com') {
// redirect to your main site
header('Location: http://example.com');
}

在主站点上,设置 cookie,并将用户发送回外部域 (domain.com),并在 Location 中传递 session ID。

header('Location: http://domain.com.com?sessid='.urlencode($_COOKIE['sessionid']));

最后一点是重定向回您所在的页面,因为您正在进行相同的 session 。

setCookie(...); // sessid in $_GET['sessid']
header('Location: http://domain.com/');

请注意,实际上,您可以在第一步中将当前所在的页面发送回 example.com,以便稍后重定向回该页面。

因为你只是使用 header (你不需要输出内容)并且在大多数情况下 HTTP/1.1 所以你将在同一个 TCP 套接字上我认为它非常有效并且比 JavaScript 更受支持选项。

编辑:不要忘记在返回外部域时设置 cookie。

最后一步是可选的,但它可以防止 sessid 出现在 URL 中。与将其保存在 HTTP header 中相比,这更像是一个安全问题。

关于php - 跨域 PHP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com