重定向后让SESSION工作

时间:2013-03-22 15:55:30

标签: php session instagram

我是PHP的新手,甚至是SESSIONS的新手

我正在使用Instagram API,我成功地授权了一个应用,并重定向到一个页面来显示内容。

我的主文件夹名为Monkey,它有一个名为Instagram的子文件夹。

我的Instagram回调网址是success.php,位于instagram文件夹中。当我从Instagram成功检索访问令牌时,它会重定向到Monkey文件夹中的索引文件。

在我的成功页面上,我正在创建一个充满数据的数组,名为instaArray。我试图将数组从instagram文件夹中的success.php传递到monkey文件夹中的index.php。

我的重定向只是

header( 'Location: ../index.php' );

因为我是会话的新手,我想我做错了。我认为这是直截了当的,但我想不是哈。

在success.php页面上,在我构建数组后,我有了这个

session_start();
$_SESSION['instagram'] = $instaArray;

我认为应该创建一个包含我的数组InstaArray的会话。

然后,在Monkey的index.php页面上,我有了这个

<?php
session_start();

$get_instagram = $_SESSION['instagram'];

print_r($get_instagram);

?>

但绝对没有任何反应。我甚至试图将会话instagram设置为一个简单的数值或1,$ _SESSION ['instagram'] = 1;并在索引页面上获取它,它也不起作用。

我做得非常糟糕,非常错误吗?我已经阅读了会议,但因为它是新的,它仍然有点令人困惑。

感谢您的帮助,我希望我能够正确地解释一切。

编辑:这是我的success.php页面完整

<?php

require 'src/db.php';
require 'src/instagram.class.php';
require 'src/instagram.config.php';

// Receive OAuth code parameter
$code = $_GET['code'];

// Check whether the user has granted access
if (true === isset($code)) {

    // Receive OAuth token object
    $data = $instagram->getOAuthToken($code);
    // Take a look at the API response

    $username = $data->user->username;
    $fullname = $data->user->full_name;
    $id = $data->user->id;
    $token = $data->access_token;

    $user_id = mysql_query("select instagram_id from users where instagram_id='$id'");

    if(mysql_num_rows($user_id) == 0) { 
        mysql_query("insert into users(instagram_username,instagram_name,instagram_id,instagram_access_token) values('$username','$fullname','$id','$token')");
    }

    //Set Cookie
    $Month = 2592000 + time();
    setcookie(instagram, $id, $Month);

        // Set user access token
    $instagram->setAccessToken($token);

        // Retrive Data
    $instaData = $instagram->getUserFeed();

    // Create Instagram Array
    $instaArray = array();
    $count = 0;

    // For each Instagram Post
    foreach ($instaData->data as $post) {
        $instaArray[$count]['post_id'] = $post->id;
        $instaArray[$count]['name'] = $post->user->username;
        $instaArray[$count]['profile_img'] = $post->user->profile-picture;
        $instaArray[$count]['img_url'] = $post->images->standard_resolution->url;
        $instaArray[$count]['caption'] = $post->caption->text;
        $instaArray[$count]['like_count'] = $post->likes->count;
        $instaArray[$count]['comment_count'] = $post->comments->count;
        $instaArray[$count]['created_time'] = $post->created_time; //Unix Format
        $count++;
    }

    // Start Session For Array
    session_start();
    $_SESSION['instagram'] = serialize($instaArray);

    header( 'Location: ../index.php' ) ;

} else {
    // Check whether an error occurred
    if (true === isset($_GET['error']))  {
        echo 'An error occurred: '.$_GET['error_description'];
    }
}

&GT;

3 个答案:

答案 0 :(得分:0)

为什么不使用ID而不是cookies而不是session + data(通常存储在服务器上的临时目录中的文本文件中)?并且将所有数据保留在数据库中,而不是允许客户端访问数据。会议也是暂时的。

注意,你知道你是否有“全局”?!

“请注意在处理会话时,在使用session_register()函数注册变量或者向$ _SESSION超全局数组添加新密钥之前,不会创建会话记录。无论是否已使用session_start()函数启动会话。“

参考:
http://www.php.net/manual/en/function.session-register.php

答案 1 :(得分:0)

在php

之后使session_start()第一行
 <?php
    session_start();

并将其从页面上的任何位置移除。

session_start()应该是index.php中的第一行,也就像在success.php中一样

注意:session_start()函数必须出现在标记之前:

参考:http://www.w3schools.com/php/php_sessions.asp

答案 2 :(得分:0)

我认为你需要在index.php中反序列化你的数组。

$get_instagram = unserialize($_SESSION['instagram']);