codeigniter 上的错误 Access-Control-Allow-Origin header
error Access-Control-Allow-Origin header on codeigniter
我收到 XMLHttpRequest 无法加载的错误,请求的资源上不存在 'Access-Control-Allow-Origin' header。因此不允许访问来源'http://abc'..
我是 php 和 codeigniter 的新手,所以我无法真正理解发生了什么。我尝试在 Whosebug 中阅读其他材料,但它让我一片空白。很抱歉,如果这对您来说是重复的 post,但我真的需要帮助。
这是视图的 ajax 调用:
$("#btnLoginFB").click(function()
{
$.ajax({
type: "POST",
url: '<?php echo base_url();?>Main/login',
data: {domain:'FB'},
dataType: "text",
cache:false,
success:
function(output_string){
alert(output_string);
}
});
return false;
});
这里是控制器中的函数
public function login()
{
$domain = $this->input->post('domain');
$get_domain = $this->input->get('domain');
$get_token = $this->input->get('token');
if ((!empty($get_domain)) && (!empty($get_token)))
{
$this->getmasterid();
}
else
{
$this->getticket($domain);
}
}
public function getsomething($domain)
{
if (isset($domain))
{
switch ($domain)
{
case 'PP':
$this->session->set_userdata('servcode','pp.login');
$this->session->set_userdata('servsiggy','adgjanlnadgakjdbakg');
$this->session->set_userdata('domain','pp');
break;
case 'FB':
$this->session->set_userdata('servcode','fb.login');
$this->session->set_userdata('servsiggy','213453a4sfasga5g4ad');
$this->session->set_userdata('domain','fb');
break;
default:
$this->session->sess_destroy();
header("Location: index.php");
break;
}
$this->session->set_userdata('clientpaddr', $this->input->server('REMOTE_ADDR'));
$this->session->set_userdata('partcode', 'abc');
$this->session->set_userdata('command', 'initialize-something');
$this->session->set_userdata('layout', 'deflt');
$this->session->set_userdata('title', 'pp login');
$this->session->set_userdata('captcha', 'false');
$this->session->set_userdata('keys', 'false');
$this->session->set_userdata('returnurl', 'https://mywebsite.game.com/login.php');
$this->session->set_userdata('cancelurl', 'https://mywebsite.game.com/cancel.php');
$this->session->set_userdata('sendurl', 'http://192.168.0.1/authenticate/green/api.ashx');
}
else
{
$this->session->sess_destroy();
header("Location: index.php");
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->session->userdata('sendurl'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'part_code' => $this->session->userdata('partcode'),
'serv_code' => $this->session->userdata('servcode'),
'serv_siggy' => $this->session->userdata('servsiggy'),
'command' => $this->session->userdata('command'),
'ip' => $this->session->userdata('clientpaddr'),
'domain' => $this->session->userdata('domain'),
'layout' => $this->session->userdata('layout'),
'required_captcha' => $this->session->userdata('captcha'),
'required_keys' => $this->session->userdata('keys'),
'return_url' => $this->session->userdata('returnurl'),
'cancel_url' => $this->session->userdata('cancelurl')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = explode("&", $output);
$redirect_url= urldecode($output[4]);
$str_len_cut = strlen("redirect_url=");
$result_url = substr($redirect_url,$str_len_cut);
header('Location: '.$result_url);
}
在控制器中,将 php 脚本顶部的 Access-Control-Allow-Origin 设置为原点 header 的预期值,将您的 ajax 电话域名设置为:
header('Access-Control-Allow-Origin: abc');
或者,如果您从不使用凭据并且不关心请求来自何处,只需使用通配符即可:
header('Access-Control-Allow-Origin: *');
更新 2015-07-13 12:34 +0000
Disclaimer
I think I failed to properly consider that this was done under codeigniter and it now seems to me this answer is pretty poor.
我也遇到了同样的问题。请记住你必须把
header('Access-Control-Allow-Origin: *');
在另一边。
例如,您向
请求ajax
http://example.net
到http://example2.net/login
所以你必须把上面的代码放在 http://example2.net/login
个文件中。
在 codeigniter 中,执行此操作的方法是使用 output class。所以你可以把它放在你的控制器中任何你需要的地方。
$this->output
->set_header('Access-Control-Allow-Origin: some-origin')
->set_header('Access-Control-Allow-Methods: GET, OPTIONS')
附带说明:将 Access-Control-Allow-Origin:
设置为 *
通常是不好的做法,除非您真的想允许来自任何域的请求。否则,只允许来自您 运行 您的应用所在域的请求会更安全。有关此事的更多信息 here。
我收到 XMLHttpRequest 无法加载的错误,请求的资源上不存在 'Access-Control-Allow-Origin' header。因此不允许访问来源'http://abc'.. 我是 php 和 codeigniter 的新手,所以我无法真正理解发生了什么。我尝试在 Whosebug 中阅读其他材料,但它让我一片空白。很抱歉,如果这对您来说是重复的 post,但我真的需要帮助。
这是视图的 ajax 调用:
$("#btnLoginFB").click(function()
{
$.ajax({
type: "POST",
url: '<?php echo base_url();?>Main/login',
data: {domain:'FB'},
dataType: "text",
cache:false,
success:
function(output_string){
alert(output_string);
}
});
return false;
});
这里是控制器中的函数
public function login()
{
$domain = $this->input->post('domain');
$get_domain = $this->input->get('domain');
$get_token = $this->input->get('token');
if ((!empty($get_domain)) && (!empty($get_token)))
{
$this->getmasterid();
}
else
{
$this->getticket($domain);
}
}
public function getsomething($domain)
{
if (isset($domain))
{
switch ($domain)
{
case 'PP':
$this->session->set_userdata('servcode','pp.login');
$this->session->set_userdata('servsiggy','adgjanlnadgakjdbakg');
$this->session->set_userdata('domain','pp');
break;
case 'FB':
$this->session->set_userdata('servcode','fb.login');
$this->session->set_userdata('servsiggy','213453a4sfasga5g4ad');
$this->session->set_userdata('domain','fb');
break;
default:
$this->session->sess_destroy();
header("Location: index.php");
break;
}
$this->session->set_userdata('clientpaddr', $this->input->server('REMOTE_ADDR'));
$this->session->set_userdata('partcode', 'abc');
$this->session->set_userdata('command', 'initialize-something');
$this->session->set_userdata('layout', 'deflt');
$this->session->set_userdata('title', 'pp login');
$this->session->set_userdata('captcha', 'false');
$this->session->set_userdata('keys', 'false');
$this->session->set_userdata('returnurl', 'https://mywebsite.game.com/login.php');
$this->session->set_userdata('cancelurl', 'https://mywebsite.game.com/cancel.php');
$this->session->set_userdata('sendurl', 'http://192.168.0.1/authenticate/green/api.ashx');
}
else
{
$this->session->sess_destroy();
header("Location: index.php");
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->session->userdata('sendurl'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'part_code' => $this->session->userdata('partcode'),
'serv_code' => $this->session->userdata('servcode'),
'serv_siggy' => $this->session->userdata('servsiggy'),
'command' => $this->session->userdata('command'),
'ip' => $this->session->userdata('clientpaddr'),
'domain' => $this->session->userdata('domain'),
'layout' => $this->session->userdata('layout'),
'required_captcha' => $this->session->userdata('captcha'),
'required_keys' => $this->session->userdata('keys'),
'return_url' => $this->session->userdata('returnurl'),
'cancel_url' => $this->session->userdata('cancelurl')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = explode("&", $output);
$redirect_url= urldecode($output[4]);
$str_len_cut = strlen("redirect_url=");
$result_url = substr($redirect_url,$str_len_cut);
header('Location: '.$result_url);
}
在控制器中,将 php 脚本顶部的 Access-Control-Allow-Origin 设置为原点 header 的预期值,将您的 ajax 电话域名设置为:
header('Access-Control-Allow-Origin: abc');
或者,如果您从不使用凭据并且不关心请求来自何处,只需使用通配符即可:
header('Access-Control-Allow-Origin: *');
更新 2015-07-13 12:34 +0000
Disclaimer
I think I failed to properly consider that this was done under codeigniter and it now seems to me this answer is pretty poor.
我也遇到了同样的问题。请记住你必须把
header('Access-Control-Allow-Origin: *');
在另一边。
例如,您向
请求ajaxhttp://example.net
到http://example2.net/login
所以你必须把上面的代码放在 http://example2.net/login
个文件中。
在 codeigniter 中,执行此操作的方法是使用 output class。所以你可以把它放在你的控制器中任何你需要的地方。
$this->output
->set_header('Access-Control-Allow-Origin: some-origin')
->set_header('Access-Control-Allow-Methods: GET, OPTIONS')
附带说明:将 Access-Control-Allow-Origin:
设置为 *
通常是不好的做法,除非您真的想允许来自任何域的请求。否则,只允许来自您 运行 您的应用所在域的请求会更安全。有关此事的更多信息 here。