Кодим IFrame приложение для Вконтакте

Так как чаще всего при разработке игр (основная масса приложений в контакте – это игры) для хранения персонализированной временной информации на сервере используется механизм сессий ($_SESSION). Мы столкнемся с одной проблемой, специфичной для IE и IFrame приложений – это нежелание активироваться сессии во фрейме, то есть глобальный массив $_SESSION не будет создаваться, когда страница будет подгружаться через фрейм. Для того что бы сессия активировалась необходимо передать специфический header (все рабочие файлы должны начинаться со следующих строк):
<?php
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
session_start();

Следующим важным шагом является авторизация пользователя Вконтакте в нашем IFrame приложении.
http://gvozd.org/index.php?api_url=http://api.vkontakte.ru/api.php&api_id=1828067&api_settings=1&
viewer_id=19998&viewer_type=0&user_id=0&group_id=0&is_app_user=1&
auth_key=ec6d4bb6d6838e80e39273b78aede757&language=0&parent_language=0&lc_name=deab711a

Ключевыми для нас являются viewer_id и auth_key (они соответствуют друг другу как логин и пароль, то есть для каждого пользователя(viewer_id) существует свой уникальный auth_key).

auth_key является хэшем строки в которую входит ID приложения, ID пользователя контакта и секретный ключ со страницы «ПЛАТЕЖИ», более точно: auth_key = md5(api_id + '_' + viewer_id + '_' + api_secret).
Это значит, что перед тем как начать работать с пользователем, нам необходимо провести проверку: соответствует ли auth_key хэшу строки.

Разберем следующий код:
$api_secret = "u9cRCJveDmP2r5SqcHqa";
$api_id     = "1930735";if (!$_SESSION['id']){
        $auth_key   = $_GET['auth_key'];
        $viewer_id  = $_GET['viewer_id'];
        if(!md5($api_id."_".$viewer_id."_".$api_secret)==$auth_key) exit('key incorrect');
        $_SESSION['id'] = $viewer_id;
        header ('Location: index.php');
        exit();}

Пример 1. Пользователь первый раз открывает наше приложение:
Так как переменной сессии $_SESSION['id'] не существует, то будет выполняться условие. В первых строках мы получаем переменные: $auth_key и $viewer_id, из тех данных, которые нам передал Вконтакте. Следующее условие является самым важным участком проверки пользователя – мы сверяем auth_key с хэшем строки, если проверка не пройдена (это значит, что кто-то подделал переменные), то прекращаем выполнение скрипта. Если же проверка пройдена, то переменной сессии $_SESSION['id'] присваиваем ID пользователя Вконтакте (авторизация пройдена – можно добавить дополнительную проверку, выбрать информацию по этому пользователю из базы, если его не существует, занести пользователя в базу данных). Затем перегружаем страницу.

Пример 2. Перезагрузка страницы:
Так как переменная сессии уже существует, то блок с авторизацией будет пропущен и пойдет дальнейшее выполнение скрипта, где и будет основной скрипт игры.

Первыми строками нашей первой странички, которая подгружается через IFrame, будут:
<?
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
session_start();
 
$api_secret = "u9cRCJveDmP2r5SqcHqa";
$api_id     = "1930735";
 
if (!$_SESSION['id']){
        $auth_key   = $_GET['auth_key'];
        $viewer_id  = $_GET['viewer_id'];
        if(!md5($api_id."_".$viewer_id."_".$api_secret)==$auth_key) exit('key incorrect');
        $_SESSION['id'] = $viewer_id;
        header ('Location: index.php');
        exit();}
 
//основной скрипт?>
Добавлено: 17 Августа 2013 03:30:41 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...