У меня есть приложение Rails, которое работает внутри Fabebook как iframe. Я использую гем Koala для связи с FB (также js SDK для некоторых частей) и Devise в качестве основы для аутентификации.
В течение некоторого времени я видел некоторые проблемы с тем, что приложение работает внутри iframe. Таким образом, сторонние куки не могут быть установлены. Для IE я использую заголовок P3P, который как-то смягчил проблему.
Но все это очень запутанно. Я на снежном барсе.
Например:
В Safari 5.1.1 я установил «Блокировать файлы cookie от третьих лиц и рекламодателей».
Приложение работает нормально, и его можно использовать без проблем.
В Chrome 5.0.874 (самое последнее обновление) был отмечен параметр «Блокировать сторонние файлы cookie от установки», поэтому нельзя установить два основных файла cookie, которые устанавливает мое приложение (файл cookie приложения и файл cookie fbs_xxxx), так что приложение не работает, поскольку пользователю необходимо постоянно проходить аутентификацию.
В Opera 11.52 нет ссылок на сторонние файлы cookie, и браузер настроен на «прием файлов cookie только с сайтов, которые я посещаю». Мое приложение работает нормально с этой настройкой.
С Firefox 7.0.1 мое приложение работает, но я просто не могу найти настройки, относящиеся к файлам cookie. Просто чтобы удалить их.
Так что, очевидно, моя проблема с Chrome, но та же настройка работает с Safari. Так что я действительно запутался.
Является ли запрос пользователя разрешить сторонние файлы cookie единственным решением этой проблемы?
Спасибо.
ОБНОВЛЕНИЕ МОЕГО ТЕКУЩЕГО РАБОЧЕГО РЕШЕНИЯ
Я провел дополнительные исследования и тесты. Я пытался использовать Rails альтернативные методы хранения сессий. По умолчанию они хранятся в файле cookie, но вы можете хранить данные сеанса в памяти, в БД и т. Д. Но этого недостаточно, поскольку он все еще использует файл cookie с указателем на выбранное вами альтернативное хранилище.
В конце я установил некоторую информацию, URL-адрес которой позволяет мне найти личность текущего пользователя, вошедшего в систему, получить пользователя и вручную войти в него, используя метод Devises sign_in. Мне это не очень нравится, но теперь я могу заблокировать сторонние куки и все еще работает. Позже я внесу изменения, и вместо реальной информации у меня будет ключ к записи memcached, откуда я получу пользователя (ранее установленный), ведь только мое приложение должно иметь доступ к этому серверу memcached.
Спасибо.