2012-11-27 37 views
0

我似乎遇到了一个问题,即该页面上的PHP会话状态始于一组定义的参数,但在重定向到Twitter以获取应用程序授权后,会返回一个完全不同的会话ID和会话状态。当我清除浏览器的Cookie时,此行为将停止并且程序正常运行。但是,在下一次Twitter授权尝试中,会话将在清除Cookie后恢复到第一次设置时的状态,但只有在从Twitter返回之后。php会话恢复到以前的状态

任何帮助,将不胜感激!

<?php 

session_start(); 
echo session_id(); 

require 'oauth/twitteroauth.php'; 
require 'Abacus.php'; 

$twitter_consumer_key = 'OwxQxjghhyBOibNvg4Tg'; 
$twitter_consumer_secret = '3rBhdAyiLGeTBR6GY4i76vilFqqV2EL5cFQjmt8pJBg'; 

if (!isset($_SESSION['user'])) { echo "<script type='text/javascript'>window.location.href=(\"$index.php\")</script>"; die(); } 

if (isset($_REQUEST['appauth'])) 
{ 
    $step = 0; 
    if (isset($_REQUEST['step'])) { 
     $step = $_REQUEST['step']; 
    } 

    switch ($_REQUEST['appauth']) 
    { 
     case 'twitter': 
      if ($step == 1) 
      { 
       $twit_conn = new TwitterOAuth($twitter_consumer_key, $twitter_consumer_secret); 
       $temp_cred = $twit_conn->getRequestToken(); 
       $_SESSION['twitter_temp_oauth_token'] = $temp_cred['oauth_token']; 
       $_SESSION['twitter_temp_oauth_token_secret'] = $temp_cred['oauth_token_secret']; 
       $redirect_url = $twit_conn->getAuthorizeURL($temp_cred); 
       //header("Location: $redirect_url"); 
       echo "<script type='text/javascript'>window.location.href=(\"$redirect_url\")</script>"; 
       die(); 
      } 
      else if ($step == 2) 
      { 
       $twit_conn = new TwitterOAuth($twitter_consumer_key, $twitter_consumer_secret, $_SESSION['twitter_temp_oauth_token'], $_SESSION['twitter_temp_oauth_token']); 
       $token_cred = $twit_conn->getAccessToken(); 
       //$_SESSION['twitter_token_cred'] = $token_cred; 

       $db_conn = mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD); 
       if (!$db_conn) { die('Could not connect to MySQL database.'); } 
       mysql_select_db(DATABASE_NAME, $db_conn); 

       mysql_query("DELETE FROM usercontentsources WHERE userid = {$_SESSION['user']['userid']} AND contentsourceid = 4", $db_conn); 
       $insert_twitter_cred_sql = "INSERT INTO usercontentsources (userid, contentsourceid, params) VALUES ({$_SESSION['user']['userid']}, 4, '{$token_cred['oauth_token']} {$token_cred['oauth_token_secret']}')"; 
       mysql_query($insert_twitter_cred_sql, $db_conn); 

       mysql_close($db_conn); 

       $twit_conn = new TwitterOAuth($twitter_consumer_key, $twitter_consumer_secret, $token_cred['oauth_token'], $token_cred['oauth_token_secret']); 
       var_dump($twit_conn->get('account/verify_credentials')); 
      } 
      break; 
     case 'facebook': 
      break; 
     default: 
      break; 
    } 
} 

?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Settings - ProjectAbacus</title> 
    </head> 
    <body> 
     <a href='settings.php?appauth=twitter&step=1'>Integrate Twitter</a> 
    </body> 
</html> 
+0

请不要使用'mysql_ *'函数来编写新代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。请参阅* [红盒子](http://goo.gl/GPmFd)*?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 –

+0

此外,这也不是一个答案:使用PDO,而不是MySQLi;)http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons –

回答

-1

我刚做了一个类似的问题 - 事实证明,(为了使多个Ajax请求的一个会话一次处理)我们在螺纹开始叫session_write_close()

这意味着我们对会话值所做的任何更改都未存储,并且会在页面重新加载时将会话值恢复为以前的状态。我们正在移动/删除session_write_close()来解决它。