Так как чаще всего при разработке игр (основная масса приложений в контакте – это игры) для хранения персонализированной временной информации на сервере используется механизм сессий ($_SESSION). Мы сталкнемся с одной проблемой, специфичной для IE и IFrame приложений – это нежелание активироваться сессии во фрейме, то есть глобальный массив $_SESSION не будет создаваться, когда страница будет подгружаться через фрейм. Для того что бы сессия активировалась необходимо передать спецефический header (все рабочие файлы должны начинаться со следующих строк):
Следующим важным шагом является авторизация пользователя Вконтакте в нашем IFrame приложении. Как я уже писал, при первой загрузки приложения пользователем, контакт передает ряд данных приложению через get-запрос.
auth_key является хэшем строки в которую входит ID приложения, ID пользователя контакта и секретный ключ со страницы «ПЛАТЕЖИ», более точно: auth_key = md5(api_id + '_' + viewer_id + '_' + api_secret).
Это значит, что перед тем как начать работать с пользователем, нам необходимо провести проверку: соответствует ли auth_key хэшу строки.
Разберем следующий код:
Пример 1. Пользователь первый раз открывает наше приложение:
Так как переменной сессии $_SESSION['id'] не существует, то будет выполняться условие. В первых строках мы получаем переменные: $auth_key и $viewer_id, из тех данных, которые нам передал Вконтакте. Следующее условие является самым важным участком проверки пользователя – мы сверяем auth_key с хэшем строки, если проверка не пройдена (это значит, что кто-то подделал переменные), то прекращаем выполнение скрипта. Если же проверка пройдена, то переменной сессии $_SESSION['id'] присваиваем ID пользователя Вконтакте (авторизация пройдена – можно добавить дополнительную проверку, выбрать информацию по этому пользователю из базы, если его не существует, занести пользователя в базу данных). Затем перегружаем страницу.
Пример 2. Перезагрузка страницы:
Так как переменная сессии уже существует, то блок с авторизацией будет пропущен и пойдет дальнейшее выполнение скрипта, где и будет основной скрипт игры.
Первыми строками нашей первой странички, которая подгружается через IFrame, будут:
Источник: devtown.ru
Код:
<?php
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
session_start();
Ключевыми для нас являются viewer_id и auth_key (они соответствуют друг другу как логин и пароль, то есть для каждого пользователя(viewer_id) существует свой уникальный auth_key).http://gvozd.org/index.php?api_url=http://...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
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();
}
Так как переменной сессии $_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();
}
//основной скрипт
?>
Источник: devtown.ru