我有一个CORS(跨源资源共享)请求,从我的登录页面到应用程序网站,在不同的URL.我有一个简单的页面我ping,以确定用户是否已经登录,如果是,重定向它们.否则我会显示登录页面.我使用jQuery
这在safari,chrome,firefox …而不是IE(自然)中非常出色.根据MS,IE 10及更高版本应该支持CORS requests with withCredentials
我正在使用jquery-2.0.3.min.js
任何想法为什么这不工作在IE11?
编辑:它似乎部分工作,因为它现在返回一个值“{”id“:false}.每次都发生这种情况,这意味着服务器从来没有获得凭据.我也在发布我的is_logged_in页面,我正在使用代码点燃器框架.
编辑:在IE的安全设置下启用“允许跨域的数据源”之后,我不再收到任何错误消息.
我收到的确切错误是:
SEC7118: XMLHttpRequest for 07001 required Cross Origin Resource Sharing (CORS).
$.ajax({ url: 'http://mysite.net/guest/is_logged_in',type: 'POST',crossDomain: true,xhrFields: { withCredentials: true },dataType: 'json',success: function(data) { if(data.id) { window.location.replace("http://mysite.net"); } } });
和
public function is_logged_in() { $allowed = array( 'http://mysite.net','http://www.mysite.net','http://www.mysite.com',); $url = $_SERVER['HTTP_REFERER']; $url = substr($url,strpos($url,'/',8)); if(isset($_SERVER['HTTP_ORIGIN'])) { if(in_array($_SERVER['HTTP_ORIGIN'],$allowed)) { $this->output->set_header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']); } } else { if(in_array($url,$allowed)) { $this->output->set_header('Access-Control-Allow-Origin: ' . $url); } } $this->output->set_header('Access-Control-Allow-Headers: X-Requested-With'); $this->output->set_header('Access-Control-Allow-Credentials: true'); $this->output->set_header("Access-Control-Expose-Headers: Access-Control-Allow-Origin"); //TODO: Try to detect if this is an ajax request,and disallow it if not. $data = new stdClass(); $this->load->library("ion_auth"); if($this->ion_auth->logged_in()) { $data->name = $this->ion_auth->user()->row()->first_name; $data->id = $this->ion_auth->get_user_id(); } else { $data->id = false; } $this->output->set_output(json_encode($data)); }
提前致谢
解决方法
将“跨域访问数据源”的设置更改为“已启用”,将关闭IE中的跨域检查,并且可怕的不安全.相反,您需要确保目标第三方资源发送一个
valid P3P policy,表示它不会对用户的隐私做任何可怕的事情.