views:

2222

answers:

4

We're building a Facebook application here at work, using the iframe method. For the application to work, it needs to set cookies from within the iframe.

Safari has third party cookies disabled by default, so we are currently redirecting the whole browser to our server, set the cookie required to track the session, and then redirect back to the Facebook application page again.

This method works, and works good. Unless someone with Firefox comes along who has manually disabled third party cookies, as Firefox defaults to having them enabled. Safari works cause it doesn't let you set cookies from an iframe, but you can read them. Firefox on the other hand, doesn't let you read the cookies, and hence it becomes kind of impossible.

Is there anyway to get Firefox to send cookies to an iframe on an external server when third party cookies are disabled?

A: 

Rather than targeting the browser, target the behaviour.

Set the cookie and on the next page-load check for them with your JS. If they're not there, set them with the alternative method.

(And make sure you don't end up in an infinite loop for users without cookies)

Edit: Hmm if FF can't read them that might be an issue. How about sending everybody through this system?

Oli
+4  A: 

Is there anyway to get Firefox to send cookies to an iframe on an external server when third party cookies are disabled?

No. And that is good. Disabling 3rd party cookies should disable them.

Sven Lilienthal
+1  A: 

Yeah it doesn't send or accept 3rd party cookies when you uncheck 3rd party cookies. However; the checkbox is "Accept third-party cookies," so it definitely seems like it should still /send/ the cookies, just not accept any new ones... wack.

Aaron Gibralter
A: 

One technique is to do a background POST to a hidden iframe on the initial page load using JavaScript. As soon as the POST response successfully returns, you'll be able to set cookies. This removes the need to affect user experience (an interstitial to force interaction is another technique). Some more thoughts and sample code here: http://gist.github.com/586182

daaku