php - Facebook API Session contents randomly changing -


so posted previous question before this, deleted because i've discovered problem.

basically, getting error:

facebook sdk returned error: cross-site request forgery validation failed. "state" param url , session not match.

i able pinpoint bizarre reason, $_session['fbrlh_state'] changing. here login.php generates login url user:

session_start(); } require_once $_server['document_root'] . '/src/facebook/autoload.php'; $fb = new facebook\facebook ([     'app_id' => '??????',     'app_secret' => '????',     'default_graph_version' => 'v2.4'     ]); $helper = $fb->getredirectloginhelper(); $loginurl = $helper->getloginurl('http://example.ca/login-callback.php'); echo '<a href="' . $loginurl . '">login</a>'; print_r($_session); 

when print_r($_session);, this:

array ( [fbrlh_state] => d116b427b433a0b3dc41a858782cd690 ) 

however (get ready magic), upon redirection login-callback.php file, array of $_session mysteriously changes this:

array ( [fbrlh_state] => e99c4ece0f8e48ab53dea6a4826c5593 ) 

here code login-callback.php

<?php header("content-type: text/html;charset=utf-8"); session_start(); print_r($_session); require_once $_server['document_root'] . '/src/facebook/autoload.php'; require_once $_server['document_root'] . '/includes/database.php'; require_once $_server['document_root'] . '/includes/user.php'; require_once $_server['document_root'] . '/vars/constants.php';  //create facebook service $fb = new facebook\facebook ([     'app_id' => '????',     'app_secret' => '????',     'default_graph_version' => 'v2.4'     ]);  $helper = $fb->getredirectloginhelper(); try {     $accesstoken = $helper->getaccesstoken(); } catch(facebook\exceptions\facebookresponseexception $e) {     // when graph returns error     echo 'graph returned error: ' . $e->getmessage();     exit; } catch(facebook\exceptions\facebooksdkexception $e) {     // when validation fails or other local issues     echo 'facebook sdk returned error: ' . $e->getmessage();     exit; }  if (isset($accesstoken)) {     $mysqli = database::connection();      // logged in!     $_session['facebook_access_token'] = (string) $accesstoken; 

when print $_session (the first thing right after headers), different value login.php one. makes no sense because they're both on same domain (non-www) , have same document.cookie phpsessid

but, there's catch. if press on login-callback.php (since login.php redirects it, , login fails due weird session magic), $_session values mysteriously match. doesn't work if refresh, when press back. think important clue what's going on have no idea.

can please me on extremely frustrating issue? idea of might going on?

edit: also, created blank file

session_start(); print_r($_session); 

and values always match login-callback.php means login.php must changing session values (but.... can't figure out how since when print_r($_session); @ bottom of file still same weird values)

weirdest solution, problem solved when removed </head> (basically let <head> unclosed)


Comments