2012-05-07 11 views
1

このコードは、Internet Explorerを除くすべてのブラウザに最適です。アプリケーションのアクセス許可のリクエストは、IEで無限にリダイレクト

基本的に、リダイレクトがIEに送信されるとき、私のサーバーから全く同じURLを要求するだけで、リダイレクトは無視されます。

// $g_facebook is declared earlier and given app id and secret 
$par[ 'scope' ] = array('publish_stream' , // publish to the user's stream 
           'offline_access' , // access these functions when the user is offline 
           // 'user_status' , // get the user's latest status 
           // 'read_stream' , // read the user's stream 
           'email'   , // provides the user's email address 
           'user_groups' , // provides the user's groups 
           // 'sms'   , // send and receive txt w/ user 
           'publish_actions', // publish scores and achievements 
           ); 
header('Location: ' . $g_facebook->getLoginUrl($par)); 
exit(); 

ここで(tcpdumpのとそれを拾った)ワイヤーに何が起こるかです::

GET /fork HTTP/1.1 
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* 
Accept-Language: en-us 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C) 
Accept-Encoding: gzip, deflate 
Host: fbar.toolsteam.com 
Connection: Keep-Alive 
Cookie: PHPSESSID=7f32d7e4acd63696bd8d0998913f608c; PHPSESSID=e30076106b21e40142397219283fd55f 

HTTP/1.0 302 Moved Temporarily 
Date: Mon, 07 May 2012 07:36:12 GMT 
Server: Apache 
X-Powered-By: PHP/5.3.10 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: PHPSESSID=a9f17a1119dc262bef693d2d39a15317; expires=Tue, 07-May-2013 07:36:12 GMT; path=/ 
Location: http://www.facebook.com/dialog/oauth?client_id=336243633108439&redirect_uri=http%3A%2F%2Ffbar.toolsteam.com%2Ffork&state=b52dd5dd08e0058e28ae8734f269cd77&scope=publish_stream%2Coffline_access%2Cemail%2Cuser_groups%2Cpublish_actions 
Content-Length: 0 
Content-Type: text/html 
X-Cache: MISS from base 
X-Cache-Lookup: MISS from base:3128 
Via: 1.1 base:3128 (squid/2.7.STABLE9) 
Connection: keep-alive 

Naitikシャー

から3.1.1コードここでは、コードがありますを使用して

IEは元の要求を何度も繰り返し送信していると見なします。それはFacebookにリダイレクトすることは決してありません。

前述のように、ChromeとFirefoxは問題ありません。

アイデア?

答えて

1

答えはリクエストヘッダにあった:

Cookie: PHPSESSID=7f32d7e4acd63696bd8d0998913f608c; PHPSESSID=e30076106b21e40142397219283fd55f 

このFacebookの認証に関与する2台のサーバーがあり、1は、第二は、Facebookの許可をネゴシエートする中間サーバで、元のウェブサイトです。フェイスブックサーバーはプライマリサイトのサブドメインです。

どちらも、PHPセッションを開始していました。 FacebookのCookieはサブドメインスコープにあり、プライマリサイトのCookieはトップドメインスコープにありました。

IEは、Facebookのサーバーへのリクエストで同じCookieを2回送信することができませんでした。トランザクションはうまく処理されましたが、何らかの理由で同じURLを再要求し、302リダイレクトを無視します。 IEはそうです。

Facebookのサーバー上でセッション変数名を切り替えたところ、問題はなくなりました。

関連する問題