2

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

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

我的主文件夹叫做 Monkey,它有一个叫做 Instagram 的子文件夹。

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

在我的成功页面上,我正在创建一个充满数据的数组,称为 instaArray。我正在尝试将数组从 instagram 文件夹中的 success.php 传递到猴子文件夹中的 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'];
    }
}

?>

4

3 回答 3

0

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

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

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

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

于 2013-03-22T16:03:08.450 回答
0

在 php 之后创建 session_start() 第一行

 <?php
    session_start();

并将其从页面上的任何地方删除。

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

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

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

于 2013-03-22T16:03:11.147 回答
0

我认为您需要在 index.php 中取消序列化()您的数组。

$get_instagram = unserialize($_SESSION['instagram']);
于 2013-03-22T16:35:48.767 回答