本机PHP会话变量在Facebook PHP登录后自动销毁
我正在为我的应用程序使用facebook php sdk 4。我添加了一些有关$\u会话的数据。但在使用FacebookRedirectLoginHelper::getLoginUrl登录后,这些会话变量将被删除。代码如下:本机PHP会话变量在Facebook PHP登录后自动销毁,php,facebook,session,sdk,Php,Facebook,Session,Sdk,我正在为我的应用程序使用facebook php sdk 4。我添加了一些有关$\u会话的数据。但在使用FacebookRedirectLoginHelper::getLoginUrl登录后,这些会话变量将被删除。代码如下: session_start(); session_regenerate_id(true); define( 'ROOT', dirname( __FILE__ ) . '/' ); require_once( ROOT . 'facebook-php-sdk-v4-
session_start();
session_regenerate_id(true);
define( 'ROOT', dirname( __FILE__ ) . '/' );
require_once( ROOT . 'facebook-php-sdk-v4-4.0-dev/autoload.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
$app_id = 'MY ID';
$app_secret = 'MY SEC';
$redirect_uri = 'http://myurl.com/a1.php';
// Requested permissions for the app - optional
$permissions = array(
'email',
'user_location',
'user_birthday',
'publish_actions'
);
// Initialize the SDK
FacebookSession::setDefaultApplication( $app_id, $app_secret );
$helper = new FacebookRedirectLoginHelper( $redirect_uri );
if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) )
{
$session = new FacebookSession( $_SESSION['fb_token'] );
try {
if ( ! $session->validate() ) {
$session = null;
}
} catch ( Exception $e ) {
// Catch any exceptions
$session = null;
}
} else {
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
} catch( Exception $ex ) {
echo $ex->message;
}
}
if ( isset( $session ) ) {
$_SESSION['fb_token'] = $session->getToken();
$session = new FacebookSession( $session->getToken() );
}
else {
// No session
$_SESSION["V_ActualData_Message"]="My Message"; **// I am not getting this one on $redirect_uri here http://myurl.com/a1.php**
$loginUrl = $helper->getLoginUrl( $permissions );
header('Location: ' . $loginUrl);
exit;
//echo '<a href="' . $loginUrl . '">Log in with FaceBook</a>';
}
session_start();
会话\u重新生成\u id(true);
定义('ROOT',目录名(_文件__)。'/');
require_once(ROOT.'facebook-php-sdk-v4-4.0-dev/autoload.php');
使用Facebook\FacebookSession;
使用Facebook\FacebookRedirectLoginHelper;
$app_id='MY id';
$app_secret='MY SEC';
$redirect_uri='1http://myurl.com/a1.php';
//请求的应用程序权限-可选
$permissions=array(
“电子邮件”,
“用户位置”,
“用户生日”,
“发布行动”
);
//初始化SDK
FacebookSession::setDefaultApplication($app\u id,$app\u secret);
$helper=newfacebookRedirectLoginHelper($redirect\u uri);
如果(isset($_会话)和&isset($_会话['fb_令牌]))
{
$session=newfacebooksession($_session['fb_token']);
试一试{
如果(!$session->validate()){
$session=null;
}
}捕获(例外$e){
//抓住任何例外
$session=null;
}
}否则{
试一试{
$session=$helper->getSessionFromRedirect();
}捕获(FacebookRequestException$ex){
}捕获(例外$ex){
echo$ex->message;
}
}
国际单项体育联合会(isset($届会)){
$\u会话['fb\u令牌']=$SESSION->getToken();
$session=newfacebooksession($session->getToken());
}
否则{
//没有会议
$\u SESSION[“V\u ActualData\u Message”]=“我的消息”**//我没有在这里的$redirect\u uri上得到这个消息http://myurl.com/a1.php**
$loginUrl=$helper->getLoginUrl($permissions);
标题('位置:'。$loginUrl);
出口
//回声';
}
下面是a1.php的内容
session_start();
define( 'ROOT', dirname( __FILE__ ) . '/' );
require_once( ROOT . 'facebook-php-sdk-v4-4.0-dev/autoload.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
$app_id = '377309525773973';
$app_secret = '7db5a66e837f0c9e000fbf9ec4276d49';
$redirect_uri = 'a1.php';
$permissions = array(
'email',
'user_location',
'user_birthday',
'publish_actions'
);
FacebookSession::setDefaultApplication( $app_id, $app_secret );
$helper = new FacebookRedirectLoginHelper($redirect_uri);
if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
$session = new FacebookSession( $_SESSION['fb_token'] );
try
{
if ( ! $session->validate($app_id,$app_secret) ) {
$session = null;
}
} catch ( Exception $e ) {
$session = null;
}
} else {
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
} catch( Exception $ex ) {
echo $ex->getMessage();
}
}
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
} catch( Exception $ex ) {
echo $ex->getMessage();
}
$message="";
$message=$_SESSION['V_ActualData_Message'];
if ( isset( $session ) ) {
$_SESSION['fb_token'] = $session->getToken();
generated at login
$session = new FacebookSession( $session->getToken() );
$logoutURL = $helper->getLogoutUrl( $session, 'facebookLogout.php' );
try
{
$request = (new FacebookRequest( $session, 'POST', '/me/feed', array(
'message' => $message
)))->execute();
$response = $request->getGraphObject()->asArray();
}
catch(FacebookClientException $ex)
{
echo $ex->getMessage();
}
echo "<br/>";
echo "Submitted Message ID";
echo "<br/>";
print_r( $response );
echo "<br/>";
echo "<br/>";
echo $message;
echo "<br/>";
echo '<a href="' . $logoutURL . '">Log out</a>';
} else {
// No session
// Get login URL
$loginUrl = $helper->getLoginUrl( $permissions );
echo '<a href="' . $loginUrl . '">Log in with FaceBook</a>';
}
session_start();
定义('ROOT',目录名(_文件__)。'/');
require_once(ROOT.'facebook-php-sdk-v4-4.0-dev/autoload.php');
使用Facebook\FacebookSession;
使用Facebook\FacebookRedirectLoginHelper;
使用Facebook\FacebookRequest;
$app_id='377309525773973';
$app_secret='7db5a66e837f0c9e000fbf9ec4276d49';
$redirect_uri='a1.php';
$permissions=array(
“电子邮件”,
“用户位置”,
“用户生日”,
“发布行动”
);
FacebookSession::setDefaultApplication($app\u id,$app\u secret);
$helper=newfacebookRedirectLoginHelper($redirect\u uri);
如果(isset($_会话)和&isset($_会话['fb_令牌])){
$session=newfacebooksession($_session['fb_token']);
尝试
{
如果(!$session->validate($app\u id,$app\u secret)){
$session=null;
}
}捕获(例外$e){
$session=null;
}
}否则{
试一试{
$session=$helper->getSessionFromRedirect();
}捕获(FacebookRequestException$ex){
}捕获(例外$ex){
echo$ex->getMessage();
}
}
试一试{
$session=$helper->getSessionFromRedirect();
}捕获(FacebookRequestException$ex){
}捕获(例外$ex){
echo$ex->getMessage();
}
$message=“”;
$message=$\会话['V\u实际数据\消息'];
国际单项体育联合会(isset($届会)){
$\u会话['fb\u令牌']=$SESSION->getToken();
在登录时生成
$session=newfacebooksession($session->getToken());
$logoutURL=$helper->getLogoutUrl($session,'facebookLogout.php');
尝试
{
$request=(新的facebook请求($session,'POST','me/feed',数组(
'message'=>$message
)))->执行();
$response=$request->getGraphObject()->asArray();
}
捕获(FacebookClientException$ex)
{
echo$ex->getMessage();
}
回声“
”;
回显“已提交邮件ID”;
回声“
”;
打印(回复);
回声“
”;
回声“
”;
回声$信息;
回声“
”;
回声';
}否则{
//没有会议
//获取登录URL
$loginUrl=$helper->getLoginUrl($permissions);
回声';
}
尝试删除会话\u重新生成\u id
以进行测试。同时发布a1.php文件。因为我的机器上没有任何会话重新生成的错误,我添加了a1.php的代码。