当前位置:  开发笔记 > 编程语言 > 正文

跨域PHP会话

如何解决《跨域PHP会话》经验,为你挑选了1个好方法。

我正在构建一个网站,允许用户在我的网站上指向CNAME记录来运行他们的"个人资料",这允许您的OWN域名在我的网站上加载您的个人资料.

这引发了与会话相关的各种问题.我见过virb做到了.我没有在iFrame中看到任何基于会话的信息...但页面上有一个iFrame.

我可以让域名的东西工作,我只是丢失会话数据......任何想法?

(这是一个例子 - 与Virb的链接 - http://www.agentspider.com/)



1> bucabay..:

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

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

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

在virb的情况下,如果没有JS,它将无法正常工作,我认为这是一个不错的选择.但是,您可以对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),在位置中传递会话ID.

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

最后一点是重定向回你现在所在的页面,你有相同的会话.

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

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

由于您只是使用标头(您不需要输出内容),并且在大多数情况下使用HTTP/1.1,因此您将使用相同的TCP套接字,我认为它非常高效,并且比JavaScript选项更受支持.

编辑:当您返回外部域时,不要忘记设置cookie.

最后一步是可选的,但它使sessid不在URL中.这更像是一个安全问题,然后将其保存在HTTP标头中.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有