2009-10-22 21 views
3

我不知道是否有一种方法来转储所有的CodeIgniter - 我的自定义会话数据被Facebook剥离了吗?

$this->session->userdata() 

值的,所以我可以解决?

我在Facebook内部工作,并有一个登录页面,一旦成功,我想传递当前用户的UID,我认为这将工作得很好。

我目前拥有的UID设置如下:

require_once 'facebook.php'; 
$appapikey = 'XXXX'; 
$appsecret = 'XXXX'; 
$facebook = new Facebook($appapikey, $appsecret); 
$user_id = $facebook->require_login(); 
$this->db->like('uid', $user_id); 
$this->db->from('users'); 
$has_signed_up = $this->db->count_all_results(); 

if ($has_signed_up == 0) { 
redirect('/setup/signup/', 'location'); 
} 
else { 
$this->session->set_userdata('uid', $user_id); 
redirect('/preferences/index/', 'location'); 
} 

所以重定向发生时,我在首选项/指数在有一个非常简单的设置:

echo "this is the preferences form <br />"; 
    echo $this->session->userdata('uid'); 
    echo $this->session->userdata('session_id'); 

而结果是不可思议的:

this is the preferences form 
858f500e167e359edc1942a96f3bac35 

因此,它完全跳过包含uid的中间回声。我没有正确设置?有没有办法转储会话数组的所有值来查看正在通过的内容?任何帮助都会很棒。

UPDATE

我已经运行的var_dump($这 - >会话级>用户数据)在每个原始网站,并通过Facebook。

在网站上公开了包含5个值(session_id,IP,User_agent,last_activity和uid)的数组中的所有设置值。

但是在Facebook Chrome中,它只显示CodeIgniter设置的4个值。我听说cookie只能是4k,而且加密可能会成为问题。 FB可以使用自己的加密(读取:更大)数据填充cookie吗?

更新2

当我注释掉重定向,只是有:

else { 
    $this->session->set_userdata('uid', $user_id); 
    echo ':test_'.$this->session->userdata('uid').'_test:'; 
    //redirect('/preferences/index/', 'location'); 
    } 

它忠实地返回:test_1234_test:在Facebook中。所以在重定向期间,它会丢失数组的这部分(但不是整个数组)。

它可能只是在重定向页面上创建一个新的会话?所以这就是为什么它只有四个“股票”变量?如果是这种情况,我需要研究它是如何创建会话的,以及Facebook是否会清除cookie。

更新3

所以我转而使用DB,而不是存储cookie的会话信息,想FB要么剥夺他们或与他们发生碰撞。我公司目前已在应用程序设置为

  1. 设置$ USER_ID = 1234
  2. $这个 - >会话级> set_userdata( 'UID',$ USER_ID)
  3. 重定向到新的页面
  4. 的var_dump在DB会发生什么情况的所有可能的信息

是这样的: DB records http://nikolausjj.facebook.joyent.us/Picture2.png

所以它创建于用户数据记录良好,然后在重定向后立即创建新会话而不识别先前的会话。有人可以解释CI框架在哪里检查是否存在先前的会话?用户手册基本上将其解释为“魔术”。

回答

1

您可以使用var_dump()输出会话。类似这样的东西

var_dump($this->session); 

set_userdata调用看起来没问题。你确定$user_id已设置。由于回显被执行,但uid未设置或设置为空字符串。

尝试用

echo ':test_'.$this->session->userdata('uid').'_test:'; 

其他信息更换回声有助于回答

    您使用的是什么浏览器
  • 你的域名中是否有下划线_
  • 您是否正在使用CI会话或本地PHPsessions的某些包装
  • uid的值是否也在注释掉重定向时丢失/未设置?

其他建议:

  • 尝试redirect('/preferences/index/', 'refresh');,而不是location
  • 我不熟悉与Facebook的发展,而且是你的控制之下/preferences/index?如果是,请尝试删除(如果存在)$this->load->library(‘session’),而将其加载到autoload.php
  • 尝试改变$config[‘sess_match_ip’]为'假
  • 尝试设置$config[‘sess_encrypt_cookie’]为FALSE
  • 尝试CI Native session
  • 更换使用CI-会议的是,如果不将其存储在cookie UID敏感信息。如果它很重要,如果它可以欺骗不要。
+0

所以我已经做到了。当我访问Facebook以外的页面时,它显示了完整的期望数组:array(6){[“session_id”] => string(32)“3ee0c3caea3bf41153ad03f3483c05e5”[“ip_address”] => string(10)“10.19.32.6 “[”user_agent“] => string(50)”Mozilla/5.0(Macintosh; U; Intel Mac OS X 10.5; en“[”last_activity“] => string(10)”1256249601“[”key“] =>但是当我通过Facebook访问相同的页面时,它只显示CI自己设置的4个值(sessid,4个字符) IP,usragent和lastactivity)任何人都知道这些设置是不同的吗?存储? – 2009-10-22 22:16:42

+0

我在OS X上同时使用Safari 4.03和FF 3.5.3,所以我只需设置$ user_id = 1234就可以了。当我评论重定向,但不会从会话数组中返回: -/ – 2009-10-22 22:39:08

+0

而且我正在使用一个小时前股票下载的CI会话(所以我没有把TOO弄得太多) 。没有_在th e域名。我也做了围绕重定向页面上的回声的测试,它出来了:test__test: – 2009-10-22 22:40:46

0

我没有解决如何通过Facebook将会话变量从一个页面传递到另一个页面。我的解决方案只是在每个页面上再次调用Facebook API来获取用户的UID。不是很棒的编程,但它对我来说可行。 : -/