php后端跨域header头,PHP接口跨域header头以及Session跨域方法

本文介绍了如何在PHP后端处理跨域请求,通过设置`Access-Control-Allow-Origin`头部来允许特定或所有域名的请求。对于多个客户网站的场景,提出了动态判断域名的解决方案。同时,为了解决Session跨域问题,使用`session.cookie_domain`设置为顶级域名,并启用`Access-Control-Allow-Credentials`以允许携带身份验证的跨域请求。

跨域问题一直都很纠结的,最近做项目是真正遇到了。现代浏览器针对不同域名之间的ajax请求,一般情况下会阻止你获取到ajax返回内容(即使是1.a.com和2.a.com也算跨域),但是请求是真实发生的。下面来讲一下,怎么在PHP后端让浏览器支持跨域请求。// 允许所有跨域请求

header('Access-Control-Allow-Origin: *');

// 只允许http://www.baidu.com下发来的跨域请求

header('Access-Control-Allow-Origin: http://www.baidu.com');

但是我们在开发接口时,可能会提供给很多个客户网站使用。如果单纯使用*或者具体域名就不太科学了,这时候我们需要进行动态的判断处理。// 定义一个允许跨域请求接口的域名列表,这里你可以用配置也可以用其它形式,我这里只是用$GLOBALS简单演示一下

$GLOBALS['API_ALLOW_ORIGINS'] = array(

'baidu.com',

'yurunsoft.com'

);

// 判断是否有origin请求头

if(isset($_SERVER['HTTP_ORIGIN']))

{

// 遍历域名列表判断

foreach($GLOBALS['API_ALLOW_ORIGINS'] as $domain)

{

if($_SERVER['HTTP_ORIGIN'] === $domain || substr($_SERVER['HTTP_ORIGIN'], -strlen($domain) - 1) === '.' . $domain)

{

header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);

break;

}

}

}

接下来要解决Session跨域问题,如何让1.a.com和2.a.com的session互通呢?ini_set('session.cookie_domain', '.a.com');

然后在header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);下面加上header('Access-Control-Allow-Credentials: true');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值