Если ваше приложение работает в IFRAME, вам следует установить заголовки P3P, чтобы включить куки.
Вы должны отправить специальный HTTP-заголовок в своем первом ответе:
P3P: CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"
Это должно решить проблему для IE, но вы, вероятно, столкнетесь с той же проблемой в Chrome и Safari.Он появляется только тогда, когда пользователь впервые посещает ваше приложение.Вы можете эмулировать его, удалив всю личную информацию из вашего браузера с помощью функции очистки браузера.
Я решил эту проблему, сохранив начальный атрибут signature_request в переменной Javascript и отправив его во всех запросах AJAX в качестве дополнительного заголовка HTTP (это возможно, если вы используете 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);
}
});
}