【问题标题】:Codeigniter loses session after redirectCodeigniter 在重定向后丢失会话
【发布时间】: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


【解决方案1】:

当然你在 Session 部分验证了你的配置文件,但是:

  1. 你已经在其他电脑上试过了吗?
  2. 尝试 DB Sessions 还是相反?
  3. 为您做了简单的测试,不包括您的案例(twitter oauth 类)
  4. 不知何故,也许代码正在替换变量,尝试在代码的许多部分记录信息,看看它是否在进程的生命周期中被覆盖

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2021-01-29
    • 2013-01-06
    • 2018-07-07
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多