session codeigniter localhost

esk*_*imo 16 php session codeigniter localhost

我正在使用这个Facebook lib for CodeIgniter,因此用户可以使用Facebook登录.在生产上工作得很好,但在localhost上却没有.困扰我的是它曾经在localhost上运行良好,但突然停止工作.

我一直在寻找一段时间,我期待这与CI的会话库有关,但我不是百分百肯定.

背景信息

  • 我正在使用PHP 5.5.10和Chrome 41.0.2272.118运行MAMP
  • 在本地我已经在MAMP中配置了httpd.conf,所以我的本地URL是一个'真正的'URL,如www.example-local.net,Apache端口是80
  • if($this->session)在视图中返回true.编辑; 我实际上并没有在视图中使用它,但它只是为了测试这是否有效
  • 生产和开发代码完全相同,除了Facebook API密钥和秘密,因为我在本地使用测试应用程序.如..所示; 之前它工作得很好,我没有改变我的测试应用程序设置.
  • 编辑:我将我的TLD配置为FB测试应用程序中的应用程序域和站点URL.同样,这似乎不是问题所在

问题

  • if($this->session)在(Facebook)库文件中返回false.编辑; 这似乎是个问题.所以这在视图中工作,而不是在库中.关于它的奇怪之处在于它之前正在工作(没有代码更改)
  • 因此,似乎库没有fb_boken在会话userdata中设置,这就是我怀疑设置有问题的原因$this->session
  • 我确实搬到了不同的时区(仅1小时),我在某处读到这可能会导致问题?编辑; 我已回到以前工作过的时区,但仍然没有工作

我已经尝试过但没有用的

  • config.php设定$config['sess_expiration']为高的值(例如,999999),而不是7200
  • config.php更改$config['cookie_domain']为localhost网站(http://www.example-local.net尝试使用和不使用斜杠)而不是空("")
  • config.php不断变化的$config['sess_match_useragent'],以FALSE代替TRUE
  • 所描述的与PHP的本地会话替换应用/系统/库/ session.php文件在这里
  • 清除我的所有Cookie和浏览数据

有关config.php的其他信息

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
Run Code Online (Sandbox Code Playgroud)

我希望使用PHP的本机会话可以解决问题,但事实并非如此.不确定我还能尝试什么.

供参考完整的Facebook.php库文件代码

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( session_status() == PHP_SESSION_NONE ) {
    session_start();
}

require_once( APPPATH . 'libraries/facebook/Facebook/GraphObject.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/GraphSessionInfo.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookSession.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookCurl.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookHttpable.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookCurlHttpClient.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookResponse.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookSDKException.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookRequestException.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookAuthorizationException.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookRequest.php' );
require_once( APPPATH . 'libraries/facebook/Facebook/FacebookRedirectLoginHelper.php' );

use Facebook\GraphSessionInfo;
use Facebook\FacebookSession;
use Facebook\FacebookCurl;
use Facebook\FacebookHttpable;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookResponse;
use Facebook\FacebookAuthorizationException;
use Facebook\FacebookRequestException;
use Facebook\FacebookRequest;
use Facebook\FacebookSDKException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\GraphObject;

class Facebook {
    var $ci;
    var $helper;
    var $session;

    public function __construct() {
        $this->ci =& get_instance();

        FacebookSession::setDefaultApplication( $this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook') );
        $this->helper = new FacebookRedirectLoginHelper( $this->ci->config->item('redirect_url', 'facebook') );

        if ( $this->ci->session->userdata('fb_token') ) {
            $this->session = new FacebookSession( $this->ci->session->userdata('fb_token') );

            // Validate the access_token to make sure it's still valid
            try {
                if ( ! $this->session->validate() ) {
                  $this->session = false;
                }
            } catch ( Exception $e ) {
                // Catch any exceptions
                $this->session = false;
            }
        } else {
            try {
                $this->session = $this->helper->getSessionFromRedirect();
            } catch(FacebookRequestException $ex) {
                // When Facebook returns an error
            } catch(\Exception $ex) {
                // When validation fails or other local issues
            }
        }

        if ( $this->session ) {
            $this->ci->session->set_userdata( 'fb_token', $this->session->getToken() );

            $this->session = new FacebookSession( $this->session->getToken() );
        }
    }


/*
|--------------------------------------------------------------------------
| Login URL
|--------------------------------------------------------------------------
*/

    public function get_login_url() {
        return $this->helper->getLoginUrl( $this->ci->config->item('permissions', 'facebook') );
    }


/*
|--------------------------------------------------------------------------
| Logout URL
|--------------------------------------------------------------------------
*/

    public function get_logout_url() {
        if ( $this->session ) {
            return $this->helper->getLogoutUrl( $this->session, site_url() );
        }
        return false;
    }


/*
|--------------------------------------------------------------------------
| Get user data
|--------------------------------------------------------------------------
*/

    public function get_user() {
        if ( $this->session ) {
            try {
                $user = (new FacebookRequest( $this->session, 'GET', '/me' ))->execute()->getGraphObject()->asArray();

                return $user;

            } catch(FacebookRequestException $e) {
                return false;

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Muh*_*eed 0

在视图中使用$this->facebook->session而不是$this->session它会起作用;)