为什么我在页面更改时丢失会话?

时间:2012-02-11 05:23:47

标签: php codeigniter session facebook-php-sdk

所以我正在尝试将PHP facebook SDK / API与codeigniter集成,因为我喜欢codeigniter,但由于某种原因,一旦我从基本URL更改页面,我就会一直丢失我的facebook会话,我已经打印了$ _session和我得到的是Array([fb_339393762762289_state] => cb8c201ed66ebcaa60407114aa92f001)任何想法为什么会这样?

以下是我的控制器的样子:

class Main extends CI_Controller {

var $user;
var $log_in_url;
var $log_out_url;

function __construct() {
    parent::__construct();
    $this->load->library('facebook');
    $perams = array(
        'scope' => 'user_about_me, read_friendlists',
        'redirect_uri' => 'http://www.example.com/'
    );
    $this->user = $this->facebook->getUser();
    $this->log_out_url = $this->facebook->getLogoutUrl();
    $this->log_in_url = $this->facebook->getLoginUrl($perams);

    print_r($this->user);
    print_r($this->log_out_url);
    print_r($this->log_in_url);
}

public function index() {
    if ($this->user) {
        try {
            $data['user_profile'] = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            error_log($e);
            $this->user = null;
        }
    }

    if ($this->user) {
        $data['logout_url'] = $this->log_out_url;
    } else {
        $data['login_url'] = $this->log_in_url;
    }
    $data['user'] = $this->user;
    $this->load->view('templet/header', $data);
    $this->load->view('main view');
    $this->load->view('templet/footer');
}

  public function account() {

  if ($this->user) {
  try {
  $data['user_profile'] = $this->facebook->api('/me');
  } catch (FacebookApiException $e) {
  error_log($e);
  $this->user = null;
  }
  }

    if ($this->user) {
        $data['logout_url'] = $this->log_out_url;
    } else {
        $data['login_url'] = $this->log_in_url;
    }
  $data['user'] = $this->user;
  $this->load->view('templet/header', $data);
  $this->load->view('account');
  $this->load->view('templet/footer');
  }
从我从api的源代码中可以理解的是,它负责处理会话,所以我不明白为什么它会一直失去它。

我在想它可能与我的Htaccess设置有关......就是这样。我更改页面时的网址如下所示www.example.com/index.php/controller_name/method_name /

我还需要对$ _GET变量进行任何操作吗?因为这是我注意到的一件事......似乎在URL中传递了一些东西,但它们不会继续到其他页面。

对此的任何帮助将不胜感激。我真的很茫然。

2 个答案:

答案 0 :(得分:1)

如果您使用CodeIgniter会话库,您必须知道“Session类不使用本机PHP会话。它会生成自己的会话数据”

CodeIgniter Session Class

答案 1 :(得分:0)

我的问题有点简单,我在改变页面的任何时候都不断丢失会话数据,并且解决方案非常简单。在CI的配置文件中,您必须为您添加网站基本URL,然后我放置并为http://www.mysite.com/创建会话,因此php sdk / api为第一个URL创建了一个会话,为第二个URL创建了另一个会话。因此,一旦我改变页面,我就丢失了所有数据。所以这是一个简单的问题,但拍摄时遇到了很多麻烦。