Klient bez sesji

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

A w czym trzymasz tą sesję ? Może w jakimś silniku typu memcache, z którego może zniknąć z braku pamięci ?

Nie wiem jaki % użytkowników ruch stanowi dla Ciebie ten błąd ale może nie warto go też w ogóle poprawiać?: http://www.devblogi.pl/2011/08/podejscie-do-poprawiania-bedow-w-stylu.html

Na ile ustawiasz ważność sesji?

Do zamknięcia przeglądarki

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]

Dzięki. Sprawdzę w poniedziałek.

@radarek - mógłbyś podlinkować do jakiegoś miejsca, które tłumaczy tą całą magię ?

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.