【发布时间】:2012-06-13 05:05:56
【问题描述】:
我正在使用 Abraham Williams twitter api 来登录用户。在第一步中,我将临时 oauth_token 和 oauth_token _secret 存储在会话中。在登录过程后用户被重定向到我的页面后,之前存储的会话数据将丢失。我该如何解决这个问题?
function oauth()
{
//Build TwitterOAuth object with client credentials
$connection = new TwitterOAuth($this->consumer_key, $this->consumer_secret);
//Get temporary credentials
$request_token = $connection->getRequestToken($this->callback);
//Save temporary credentials to session
$session_data = array(
'oauth_token' => $request_token['oauth_token'],
'oauth_token_secret'=> $request_token['oauth_token_secret'],
);
$this->session->set_userdata($session_data);
//If last connection failed don't display authorization link.
switch ($connection->http_code)
{
case 200:
$url = $connection->getAuthorizeURL($request_token['oauth_token'], TRUE);
header('Location: ' . $url);
break;
default:
echo 'Could not connect to Twitter. Refresh the page or try again later.';
}
}
function callback()//callback after user signs in with twitter
{
$connection = new TwitterOAuth($this->consumer_key,
$this->consumer_secret,
$this->session->userdata("oauth_token"),
$this->session->userdata("oauth_token_secret"));
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
$this->session->set_userdata('access_token', $access_token);
//Remove no longer needed request tokens
$this->session->unset_userdata('oauth_token');
$this->session->unset_userdata('oauth_token_secret');
//If HTTP response is 200 continue otherwise send to connect page to retry
if (200 == $connection->http_code)
{
$this->session->set_userdata('twitter_log_in', TRUE);
redirect('/main/', 'refresh');
}
}
【问题讨论】:
-
检查其他地区的问题,因为在可能的情况下我成功获得了会话值
-
您说“之前存储的会话数据丢失了”,是不是在数据库中创建了新的会话记录?假设您使用数据库会话。
-
您使用的是什么网络浏览器?你在 WebKit 和 FireFox 和 IE 中测试过吗?哪个给你带来问题?我也有类似的问题,也许你会发现一些线索:Rails sessions and OAuth in WebKit, missing session data, but works in FireFox?
标签: php api codeigniter session twitter