我的应用程序工作流程是这样的:用户经过身份验证,他们启动游戏,一段时间后我发出ajax请求获取一些数据,但此请求也经过身份验证。
问题在于,当第一次发出ajax请求时,Internet Explorer会将用户视为未经身份验证,并强制重定向,一切正常。
仅在Internet Explorer上出现此问题。
有什么想法吗?
答案 0 :(得分:0)
如果您的应用程序在IFRAME中运行,那么您应该设置P3P标头以启用Cookie。
您应该在第一个响应中发送一个特殊的HTTP标头:
P3P: CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"
这应解决IE的问题,但您可能会在Chrome和Safari中遇到同样的问题。它仅在用户首次访问您的应用时显示。您可以使用浏览器清理功能清除浏览器中的所有个人信息来模拟它。
我通过将初始signed_request属性存储到Javascript变量并将其作为附加HTTP头发送到所有AJAX请求中来解决此问题(如果使用jQuery,则可以)。此外,我为所有链接和表单添加了相同的属性。
示例代码:
var signed_request = '...'; // My signed request goes here
...
function signedUrl(url){
var url_parts = url.split('#', 2);
var new_url = url_parts[0] + (url_parts[0].indexOf('?') == -1 ? '?' : '&') + 'stored_signed_request=' + signed_request;
if(url_parts.length == 2) {
new_url = new_url + '#' + url_parts[1];
}
return new_url;
}
...
if(document.cookie.indexOf('fbsr_') == -1){
$('a').live('click', function(){
var href = $(this).attr('href') || '';
if(href !== ''){
$(this).attr('href', signedUrl(href));
}
});
$('form').live('submit', function(){
$(this).append('<input type="hidden" name="stored_signed_request" value="' + signed_request + '">');
});
$.ajaxSetup({
beforeSend : function(request){
request.setRequestHeader('signed-request', signed_request);
}
});
}