Witam, mam aplikację na Facebooku (iframe) z backendem rails i w ciągu 2 mieśięcy 3 razy zdarzył się użytkownik, który wywołuje 500 z powodu braku wartości w sesji, która powinna tam być. Exception notification w sekcji Session daje takie informacje.
[code]-------------------------------
Session:
session id: nil
data: {}[/code]
Co to może znaczyć? Czy to bug przeglądarki (* HTTP_USER_AGENT : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;) albo facebooka? Nie jestem w stanie tego błędu zasymulować, a wiem że nie był to żaden robot bo rozmawiałem z człowiekiem.
Dzieje się tak po przejściu przez proces autoryzacji mojej aplikacji przez klienta.
Mam oczywiście dodane gdzie trzeba skip_before_filter :verify_authenticity_token
Standartowo cookie_store. Przypisuje do sesji wartość, następnie klient przechodzi przez proces autoryzacji na facebook i wraca na stronę z moim iframem. Być może nawet tej wartości nie przypisuje, nie mam tego jak sprawdzić.
Czy może mieć to coś wspólnego z third-party cookies? Czyli przeglądarka nie pozawal mi nawet ciastka z identyfikatorem sesji zostawić?
Jest to jakiś na oko 3% ruchu, więc nie ma dramatu. Ale jednak…
Tak, może to być kwestia 3rd party cookies. Jesteś w stanie sprawdzić czy Ci użytkownicy używają tej samej przeglądarki? (IE lubi blokować takie ciastka). Spróbuj jeszcze dodać w filtrze Twojej aplikacji coś takiego:
[code=ruby] before_filter :set_cookie_p3p_policy
private
def set_cookie_p3p_policy
headers[‘P3P’] =‘CP=“IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”’;
end[/code]
Okazało się że to dokładnie problem third-party cookies.
Niestety rozwiązanie @radarka nie działa
Facebook serwując kontent iframa sam się tym zamuje więc nie powinno być problemu ale robi to tylko na fan pagu a nie na stronie aplikacji
Przeglądarki zachowują się na dwa sposoby:
Jedne nie pozwalają w ogóle utorzyć ciastka (nawet z id sessji) i wtedy jest kupa nie do ominięcia.
Drugie traktują ciastko jako read-only gdy aplikacja chce do nich coś zapisać i nie znajduje się w obrębie fan page (nie pomaga facebook)
Rozwiązaniem tego drugiego wydaje się trzymanie sesji po stronie serwera, przeniosłem sesje do bazy i działa.